blob: dd9c413f0fe8a4881709450be8d31a4f0bc5093f [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" data-content_root="" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>ADBC C API Specification &#8212; Apache Arrow v17.0.0.dev59</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "light";
</script>
<!-- Loaded before other Sphinx assets -->
<link href="../../_static/styles/theme.css?digest=8d27b9dea8ad943066ae" rel="stylesheet" />
<link href="../../_static/styles/bootstrap.css?digest=8d27b9dea8ad943066ae" rel="stylesheet" />
<link href="../../_static/styles/pydata-sphinx-theme.css?digest=8d27b9dea8ad943066ae" rel="stylesheet" />
<link href="../../_static/vendor/fontawesome/6.5.1/css/all.min.css?digest=8d27b9dea8ad943066ae" rel="stylesheet" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.1/webfonts/fa-solid-900.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.1/webfonts/fa-brands-400.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.1/webfonts/fa-regular-400.woff2" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" />
<link rel="stylesheet" type="text/css" href="../../_static/theme_overrides.css" />
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="../../_static/scripts/bootstrap.js?digest=8d27b9dea8ad943066ae" />
<link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=8d27b9dea8ad943066ae" />
<script src="../../_static/vendor/fontawesome/6.5.1/js/all.min.js?digest=8d27b9dea8ad943066ae"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/sphinx_highlight.js"></script>
<script src="../../_static/clipboard.min.js"></script>
<script src="../../_static/copybutton.js"></script>
<script src="../../_static/design-tabs.js"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'format/ADBC/C';</script>
<script>
DOCUMENTATION_OPTIONS.theme_version = '0.15.2';
DOCUMENTATION_OPTIONS.theme_switcher_json_url = '/docs/_static/versions.json';
DOCUMENTATION_OPTIONS.theme_switcher_version_match = 'dev/';
DOCUMENTATION_OPTIONS.show_version_warning_banner = true;
</script>
<link rel="canonical" href="https://arrow.apache.org/docs/format/ADBC/C.html" />
<link rel="icon" href="../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="ADBC Go API Specification" href="Go.html" />
<link rel="prev" title="ADBC: Arrow Database Connectivity" href="../ADBC.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="en"/>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
/* We explicitly disable cookie tracking to avoid privacy issues */
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '20']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<a id="pst-skip-link" class="skip-link" href="#main-content">Skip to main content</a>
<div id="pst-scroll-pixel-helper"></div>
<button type="button" class="btn rounded-pill" id="pst-back-to-top">
<i class="fa-solid fa-arrow-up"></i>
Back to top
</button>
<input type="checkbox"
class="sidebar-toggle"
name="__primary"
id="__primary"/>
<label class="overlay overlay-primary" for="__primary"></label>
<input type="checkbox"
class="sidebar-toggle"
name="__secondary"
id="__secondary"/>
<label class="overlay overlay-secondary" for="__secondary"></label>
<div class="search-button__wrapper">
<div class="search-button__overlay"></div>
<div class="search-button__search-container">
<form class="bd-search d-flex align-items-center"
action="../../search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
id="search-input"
placeholder="Search the docs ..."
aria-label="Search the docs ..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form></div>
</div>
<header class="bd-header navbar navbar-expand-lg bd-navbar">
<div class="bd-header__inner bd-page-width">
<label class="sidebar-toggle primary-toggle" for="__primary">
<span class="fa-solid fa-bars"></span>
</label>
<div class="col-lg-3 navbar-header-items__start">
<div class="navbar-item">
<a class="navbar-brand logo" href="../../index.html">
<img src="../../_static/arrow.png" class="logo__image only-light" alt="Apache Arrow v17.0.0.dev59 - Home"/>
<script>document.write(`<img src="../../_static/arrow-dark.png" class="logo__image only-dark" alt="Apache Arrow v17.0.0.dev59 - Home"/>`);</script>
</a></div>
</div>
<div class="col-lg-9 navbar-header-items">
<div class="me-auto navbar-header-items__center">
<div class="navbar-item">
<nav class="navbar-nav">
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item current active">
<a class="nav-link nav-internal" href="../index.html">
Specifications
</a>
</li>
<li class="nav-item">
<a class="nav-link nav-internal" href="../../developers/index.html">
Development
</a>
</li>
<li class="nav-item dropdown">
<button class="btn dropdown-toggle nav-item" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-controls="pst-nav-more-links">
Implementations
</button>
<ul id="pst-nav-more-links" class="dropdown-menu">
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../c_glib/index.html">
C/GLib
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../cpp/index.html">
C++
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/csharp/README.md">
C#
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://pkg.go.dev/github.com/apache/arrow/go/v17">
Go
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../java/index.html">
Java
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../js/index.html">
JavaScript
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/julia/">
Julia
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/matlab/README.md">
MATLAB
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/nanoarrow/">
nanoarrow
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../python/index.html">
Python
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../r/index.html">
R
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/ruby/README.md">
Ruby
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://docs.rs/crate/arrow/">
Rust
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../status.html">
Implementation Status
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/cpp/">
C++ cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/java/">
Java cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/py/">
Python cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/r/">
R cookbook
</a>
</li>
</ul>
</li>
</ul>
</nav></div>
</div>
<div class="navbar-header-items__end">
<div class="navbar-item navbar-persistent--container">
<script>
document.write(`
<button class="btn navbar-btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
`);
</script>
</div>
<div class="navbar-item">
<script>
document.write(`
<div class="version-switcher__container dropdown">
<button id="pst-version-switcher-button-2"
type="button"
class="version-switcher__button btn btn-sm navbar-btn dropdown-toggle"
data-bs-toggle="dropdown"
aria-haspopup="listbox"
aria-controls="pst-version-switcher-list-2"
aria-label="Version switcher list"
>
Choose version <!-- this text may get changed later by javascript -->
<span class="caret"></span>
</button>
<div id="pst-version-switcher-list-2"
class="version-switcher__menu dropdown-menu list-group-flush py-0"
role="listbox" aria-labelledby="pst-version-switcher-button-2">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div>
`);
</script></div>
<div class="navbar-item">
<script>
document.write(`
<button class="btn btn-sm navbar-btn theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="theme-switch nav-link" data-mode="light"><i class="fa-solid fa-sun fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="dark"><i class="fa-solid fa-moon fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="auto"><i class="fa-solid fa-circle-half-stroke fa-lg"></i></span>
</button>
`);
</script></div>
<div class="navbar-item"><ul class="navbar-icon-links navbar-nav"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/apache/arrow" title="GitHub" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://twitter.com/ApacheArrow" title="X" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-x-twitter fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">X</span></a>
</li>
</ul></div>
</div>
</div>
<div class="navbar-persistent--mobile">
<script>
document.write(`
<button class="btn navbar-btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
`);
</script>
</div>
<label class="sidebar-toggle secondary-toggle" for="__secondary" tabindex="0">
<span class="fa-solid fa-outdent"></span>
</label>
</div>
</header>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<div class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
<div class="sidebar-header-items__center">
<div class="navbar-item">
<nav class="navbar-nav">
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item current active">
<a class="nav-link nav-internal" href="../index.html">
Specifications
</a>
</li>
<li class="nav-item">
<a class="nav-link nav-internal" href="../../developers/index.html">
Development
</a>
</li>
<li class="nav-item dropdown">
<button class="btn dropdown-toggle nav-item" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-controls="pst-nav-more-links-2">
Implementations
</button>
<ul id="pst-nav-more-links-2" class="dropdown-menu">
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../c_glib/index.html">
C/GLib
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../cpp/index.html">
C++
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/csharp/README.md">
C#
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://pkg.go.dev/github.com/apache/arrow/go/v17">
Go
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../java/index.html">
Java
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../js/index.html">
JavaScript
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/julia/">
Julia
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/matlab/README.md">
MATLAB
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/nanoarrow/">
nanoarrow
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../python/index.html">
Python
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../r/index.html">
R
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/ruby/README.md">
Ruby
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://docs.rs/crate/arrow/">
Rust
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../status.html">
Implementation Status
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/cpp/">
C++ cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/java/">
Java cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/py/">
Python cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/r/">
R cookbook
</a>
</li>
</ul>
</li>
</ul>
</nav></div>
</div>
<div class="sidebar-header-items__end">
<div class="navbar-item">
<script>
document.write(`
<div class="version-switcher__container dropdown">
<button id="pst-version-switcher-button-3"
type="button"
class="version-switcher__button btn btn-sm navbar-btn dropdown-toggle"
data-bs-toggle="dropdown"
aria-haspopup="listbox"
aria-controls="pst-version-switcher-list-3"
aria-label="Version switcher list"
>
Choose version <!-- this text may get changed later by javascript -->
<span class="caret"></span>
</button>
<div id="pst-version-switcher-list-3"
class="version-switcher__menu dropdown-menu list-group-flush py-0"
role="listbox" aria-labelledby="pst-version-switcher-button-3">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div>
`);
</script></div>
<div class="navbar-item">
<script>
document.write(`
<button class="btn btn-sm navbar-btn theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="theme-switch nav-link" data-mode="light"><i class="fa-solid fa-sun fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="dark"><i class="fa-solid fa-moon fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="auto"><i class="fa-solid fa-circle-half-stroke fa-lg"></i></span>
</button>
`);
</script></div>
<div class="navbar-item"><ul class="navbar-icon-links navbar-nav"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/apache/arrow" title="GitHub" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://twitter.com/ApacheArrow" title="X" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-x-twitter fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">X</span></a>
</li>
</ul></div>
</div>
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<nav class="bd-docs-nav bd-links"
aria-label="Section Navigation">
<p class="bd-links__title" role="heading" aria-level="1">Section Navigation</p>
<div class="bd-toc-item navbar-nav"><ul class="current nav bd-sidenav">
<li class="toctree-l1"><a class="reference internal" href="../Versioning.html">Format Versioning and Stability</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Columnar.html">Arrow Columnar Format</a></li>
<li class="toctree-l1"><a class="reference internal" href="../CanonicalExtensions.html">Canonical Extension Types</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Other.html">Other Data Structures</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../CDataInterface.html">The Arrow C data interface</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-1"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../CDataInterface/PyCapsuleInterface.html">The Arrow PyCapsule Interface</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../CStreamInterface.html">The Arrow C stream interface</a></li>
<li class="toctree-l1"><a class="reference internal" href="../CDeviceDataInterface.html">The Arrow C Device data interface</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Flight.html">Arrow Flight RPC</a></li>
<li class="toctree-l1"><a class="reference internal" href="../FlightSql.html">Arrow Flight SQL</a></li>
<li class="toctree-l1 current active has-children"><a class="reference internal" href="../ADBC.html">ADBC: Arrow Database Connectivity</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-2"><i class="fa-solid fa-chevron-down"></i></label><ul class="current">
<li class="toctree-l2 current active"><a class="current reference internal" href="#">ADBC C API Specification</a></li>
<li class="toctree-l2"><a class="reference internal" href="Go.html">ADBC Go API Specification</a></li>
<li class="toctree-l2"><a class="reference internal" href="Java.html">ADBC Java API Specification</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../Changing.html">Changing the Apache Arrow Format Specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Integration.html">Integration Testing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Glossary.html">Glossary</a></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
</div>
<div id="rtd-footer-container"></div>
</div>
<main id="main-content" class="bd-main">
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item">
<nav aria-label="Breadcrumb">
<ul class="bd-breadcrumbs">
<li class="breadcrumb-item breadcrumb-home">
<a href="../../index.html" class="nav-link" aria-label="Home">
<i class="fa-solid fa-home"></i>
</a>
</li>
<li class="breadcrumb-item"><a href="../index.html" class="nav-link">Specifications</a></li>
<li class="breadcrumb-item"><a href="../ADBC.html" class="nav-link">ADBC: Arrow Database Connectivity</a></li>
<li class="breadcrumb-item active" aria-current="page">ADBC C API...</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article">
<section id="adbc-c-api-specification">
<h1>ADBC C API Specification<a class="headerlink" href="#adbc-c-api-specification" title="Permalink to this heading">#</a></h1>
<p>In C, ADBC consists of a self-contained header. The header is
reproduced in full here, and is intended to be self-documenting.</p>
<p>From apache/arrow-adbc commit <a class="reference external" href="https://github.com/apache/arrow-adbc/commit/f044edf5256abfb4c091b0ad2acc73afea2c93c0">f044edf5256abfb4c091b0ad2acc73afea2c93c0</a>:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 166</span><span class="c1">/// \defgroup adbc-error-handling Error Handling</span>
<span class="linenos"> 167</span><span class="c1">/// ADBC uses integer error codes to signal errors. To provide more</span>
<span class="linenos"> 168</span><span class="c1">/// detail about errors, functions may also return an AdbcError via an</span>
<span class="linenos"> 169</span><span class="c1">/// optional out parameter, which can be inspected. If provided, it is</span>
<span class="linenos"> 170</span><span class="c1">/// the responsibility of the caller to zero-initialize the AdbcError</span>
<span class="linenos"> 171</span><span class="c1">/// value.</span>
<span class="linenos"> 172</span><span class="c1">///</span>
<span class="linenos"> 173</span><span class="c1">/// @{</span>
<span class="linenos"> 174</span>
<span class="linenos"> 175</span><span class="c1">/// \brief Error codes for operations that may fail.</span>
<span class="linenos"> 176</span><span class="k">typedef</span><span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="p">;</span>
<span class="linenos"> 177</span>
<span class="linenos"> 178</span><span class="c1">/// \brief No error.</span>
<span class="linenos"> 179</span><span class="cp">#define ADBC_STATUS_OK 0</span>
<span class="linenos"> 180</span><span class="c1">/// \brief An unknown error occurred.</span>
<span class="linenos"> 181</span><span class="c1">///</span>
<span class="linenos"> 182</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 183</span><span class="cp">#define ADBC_STATUS_UNKNOWN 1</span>
<span class="linenos"> 184</span><span class="c1">/// \brief The operation is not implemented or supported.</span>
<span class="linenos"> 185</span><span class="c1">///</span>
<span class="linenos"> 186</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 187</span><span class="cp">#define ADBC_STATUS_NOT_IMPLEMENTED 2</span>
<span class="linenos"> 188</span><span class="c1">/// \brief A requested resource was not found.</span>
<span class="linenos"> 189</span><span class="c1">///</span>
<span class="linenos"> 190</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 191</span><span class="cp">#define ADBC_STATUS_NOT_FOUND 3</span>
<span class="linenos"> 192</span><span class="c1">/// \brief A requested resource already exists.</span>
<span class="linenos"> 193</span><span class="c1">///</span>
<span class="linenos"> 194</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 195</span><span class="cp">#define ADBC_STATUS_ALREADY_EXISTS 4</span>
<span class="linenos"> 196</span><span class="c1">/// \brief The arguments are invalid, likely a programming error.</span>
<span class="linenos"> 197</span><span class="c1">///</span>
<span class="linenos"> 198</span><span class="c1">/// For instance, they may be of the wrong format, or out of range.</span>
<span class="linenos"> 199</span><span class="c1">///</span>
<span class="linenos"> 200</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 201</span><span class="cp">#define ADBC_STATUS_INVALID_ARGUMENT 5</span>
<span class="linenos"> 202</span><span class="c1">/// \brief The preconditions for the operation are not met, likely a</span>
<span class="linenos"> 203</span><span class="c1">/// programming error.</span>
<span class="linenos"> 204</span><span class="c1">///</span>
<span class="linenos"> 205</span><span class="c1">/// For instance, the object may be uninitialized, or may have not</span>
<span class="linenos"> 206</span><span class="c1">/// been fully configured.</span>
<span class="linenos"> 207</span><span class="c1">///</span>
<span class="linenos"> 208</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 209</span><span class="cp">#define ADBC_STATUS_INVALID_STATE 6</span>
<span class="linenos"> 210</span><span class="c1">/// \brief Invalid data was processed (not a programming error).</span>
<span class="linenos"> 211</span><span class="c1">///</span>
<span class="linenos"> 212</span><span class="c1">/// For instance, a division by zero may have occurred during query</span>
<span class="linenos"> 213</span><span class="c1">/// execution.</span>
<span class="linenos"> 214</span><span class="c1">///</span>
<span class="linenos"> 215</span><span class="c1">/// May indicate a database-side error only.</span>
<span class="linenos"> 216</span><span class="cp">#define ADBC_STATUS_INVALID_DATA 7</span>
<span class="linenos"> 217</span><span class="c1">/// \brief The database&#39;s integrity was affected.</span>
<span class="linenos"> 218</span><span class="c1">///</span>
<span class="linenos"> 219</span><span class="c1">/// For instance, a foreign key check may have failed, or a uniqueness</span>
<span class="linenos"> 220</span><span class="c1">/// constraint may have been violated.</span>
<span class="linenos"> 221</span><span class="c1">///</span>
<span class="linenos"> 222</span><span class="c1">/// May indicate a database-side error only.</span>
<span class="linenos"> 223</span><span class="cp">#define ADBC_STATUS_INTEGRITY 8</span>
<span class="linenos"> 224</span><span class="c1">/// \brief An error internal to the driver or database occurred.</span>
<span class="linenos"> 225</span><span class="c1">///</span>
<span class="linenos"> 226</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 227</span><span class="cp">#define ADBC_STATUS_INTERNAL 9</span>
<span class="linenos"> 228</span><span class="c1">/// \brief An I/O error occurred.</span>
<span class="linenos"> 229</span><span class="c1">///</span>
<span class="linenos"> 230</span><span class="c1">/// For instance, a remote service may be unavailable.</span>
<span class="linenos"> 231</span><span class="c1">///</span>
<span class="linenos"> 232</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 233</span><span class="cp">#define ADBC_STATUS_IO 10</span>
<span class="linenos"> 234</span><span class="c1">/// \brief The operation was cancelled, not due to a timeout.</span>
<span class="linenos"> 235</span><span class="c1">///</span>
<span class="linenos"> 236</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 237</span><span class="cp">#define ADBC_STATUS_CANCELLED 11</span>
<span class="linenos"> 238</span><span class="c1">/// \brief The operation was cancelled due to a timeout.</span>
<span class="linenos"> 239</span><span class="c1">///</span>
<span class="linenos"> 240</span><span class="c1">/// May indicate a driver-side or database-side error.</span>
<span class="linenos"> 241</span><span class="cp">#define ADBC_STATUS_TIMEOUT 12</span>
<span class="linenos"> 242</span><span class="c1">/// \brief Authentication failed.</span>
<span class="linenos"> 243</span><span class="c1">///</span>
<span class="linenos"> 244</span><span class="c1">/// May indicate a database-side error only.</span>
<span class="linenos"> 245</span><span class="cp">#define ADBC_STATUS_UNAUTHENTICATED 13</span>
<span class="linenos"> 246</span><span class="c1">/// \brief The client is not authorized to perform the given operation.</span>
<span class="linenos"> 247</span><span class="c1">///</span>
<span class="linenos"> 248</span><span class="c1">/// May indicate a database-side error only.</span>
<span class="linenos"> 249</span><span class="cp">#define ADBC_STATUS_UNAUTHORIZED 14</span>
<span class="linenos"> 250</span>
<span class="linenos"> 251</span><span class="c1">/// \brief A detailed error message for an operation.</span>
<span class="linenos"> 252</span><span class="k">struct</span><span class="w"> </span><span class="nc">ADBC_EXPORT</span><span class="w"> </span><span class="n">AdbcError</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 253</span><span class="w"> </span><span class="c1">/// \brief The error message.</span>
<span class="linenos"> 254</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">message</span><span class="p">;</span>
<span class="linenos"> 255</span>
<span class="linenos"> 256</span><span class="w"> </span><span class="c1">/// \brief A vendor-specific error code, if applicable.</span>
<span class="linenos"> 257</span><span class="w"> </span><span class="kt">int32_t</span><span class="w"> </span><span class="n">vendor_code</span><span class="p">;</span>
<span class="linenos"> 258</span>
<span class="linenos"> 259</span><span class="w"> </span><span class="c1">/// \brief A SQLSTATE error code, if provided, as defined by the</span>
<span class="linenos"> 260</span><span class="w"> </span><span class="c1">/// SQL:2003 standard. If not set, it should be set to</span>
<span class="linenos"> 261</span><span class="w"> </span><span class="c1">/// &quot;\0\0\0\0\0&quot;.</span>
<span class="linenos"> 262</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="n">sqlstate</span><span class="p">[</span><span class="mi">5</span><span class="p">];</span>
<span class="linenos"> 263</span>
<span class="linenos"> 264</span><span class="w"> </span><span class="c1">/// \brief Release the contained error.</span>
<span class="linenos"> 265</span><span class="w"> </span><span class="c1">///</span>
<span class="linenos"> 266</span><span class="w"> </span><span class="c1">/// Unlike other structures, this is an embedded callback to make it</span>
<span class="linenos"> 267</span><span class="w"> </span><span class="c1">/// easier for the driver manager and driver to cooperate.</span>
<span class="linenos"> 268</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">release</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 269</span><span class="p">};</span>
<span class="linenos"> 270</span>
<span class="linenos"> 271</span><span class="c1">/// @}</span>
<span class="linenos"> 272</span>
<span class="linenos"> 273</span><span class="c1">/// \defgroup adbc-constants Constants</span>
<span class="linenos"> 274</span><span class="c1">/// @{</span>
<span class="linenos"> 275</span>
<span class="linenos"> 276</span><span class="c1">/// \brief ADBC revision 1.0.0.</span>
<span class="linenos"> 277</span><span class="c1">///</span>
<span class="linenos"> 278</span><span class="c1">/// When passed to an AdbcDriverInitFunc(), the driver parameter must</span>
<span class="linenos"> 279</span><span class="c1">/// point to an AdbcDriver.</span>
<span class="linenos"> 280</span><span class="cp">#define ADBC_VERSION_1_0_0 1000000</span>
<span class="linenos"> 281</span>
<span class="linenos"> 282</span><span class="c1">/// \brief Canonical option value for enabling an option.</span>
<span class="linenos"> 283</span><span class="c1">///</span>
<span class="linenos"> 284</span><span class="c1">/// For use as the value in SetOption calls.</span>
<span class="linenos"> 285</span><span class="cp">#define ADBC_OPTION_VALUE_ENABLED &quot;true&quot;</span>
<span class="linenos"> 286</span><span class="c1">/// \brief Canonical option value for disabling an option.</span>
<span class="linenos"> 287</span><span class="c1">///</span>
<span class="linenos"> 288</span><span class="c1">/// For use as the value in SetOption calls.</span>
<span class="linenos"> 289</span><span class="cp">#define ADBC_OPTION_VALUE_DISABLED &quot;false&quot;</span>
<span class="linenos"> 290</span>
<span class="linenos"> 291</span><span class="c1">/// \brief The database vendor/product name (e.g. the server name).</span>
<span class="linenos"> 292</span><span class="c1">/// (type: utf8).</span>
<span class="linenos"> 293</span><span class="c1">///</span>
<span class="linenos"> 294</span><span class="c1">/// \see AdbcConnectionGetInfo</span>
<span class="linenos"> 295</span><span class="cp">#define ADBC_INFO_VENDOR_NAME 0</span>
<span class="linenos"> 296</span><span class="c1">/// \brief The database vendor/product version (type: utf8).</span>
<span class="linenos"> 297</span><span class="c1">///</span>
<span class="linenos"> 298</span><span class="c1">/// \see AdbcConnectionGetInfo</span>
<span class="linenos"> 299</span><span class="cp">#define ADBC_INFO_VENDOR_VERSION 1</span>
<span class="linenos"> 300</span><span class="c1">/// \brief The database vendor/product Arrow library version (type:</span>
<span class="linenos"> 301</span><span class="c1">/// utf8).</span>
<span class="linenos"> 302</span><span class="c1">///</span>
<span class="linenos"> 303</span><span class="c1">/// \see AdbcConnectionGetInfo</span>
<span class="linenos"> 304</span><span class="cp">#define ADBC_INFO_VENDOR_ARROW_VERSION 2</span>
<span class="linenos"> 305</span>
<span class="linenos"> 306</span><span class="c1">/// \brief The driver name (type: utf8).</span>
<span class="linenos"> 307</span><span class="c1">///</span>
<span class="linenos"> 308</span><span class="c1">/// \see AdbcConnectionGetInfo</span>
<span class="linenos"> 309</span><span class="cp">#define ADBC_INFO_DRIVER_NAME 100</span>
<span class="linenos"> 310</span><span class="c1">/// \brief The driver version (type: utf8).</span>
<span class="linenos"> 311</span><span class="c1">///</span>
<span class="linenos"> 312</span><span class="c1">/// \see AdbcConnectionGetInfo</span>
<span class="linenos"> 313</span><span class="cp">#define ADBC_INFO_DRIVER_VERSION 101</span>
<span class="linenos"> 314</span><span class="c1">/// \brief The driver Arrow library version (type: utf8).</span>
<span class="linenos"> 315</span><span class="c1">///</span>
<span class="linenos"> 316</span><span class="c1">/// \see AdbcConnectionGetInfo</span>
<span class="linenos"> 317</span><span class="cp">#define ADBC_INFO_DRIVER_ARROW_VERSION 102</span>
<span class="linenos"> 318</span>
<span class="linenos"> 319</span><span class="c1">/// \brief Return metadata on catalogs, schemas, tables, and columns.</span>
<span class="linenos"> 320</span><span class="c1">///</span>
<span class="linenos"> 321</span><span class="c1">/// \see AdbcConnectionGetObjects</span>
<span class="linenos"> 322</span><span class="cp">#define ADBC_OBJECT_DEPTH_ALL 0</span>
<span class="linenos"> 323</span><span class="c1">/// \brief Return metadata on catalogs only.</span>
<span class="linenos"> 324</span><span class="c1">///</span>
<span class="linenos"> 325</span><span class="c1">/// \see AdbcConnectionGetObjects</span>
<span class="linenos"> 326</span><span class="cp">#define ADBC_OBJECT_DEPTH_CATALOGS 1</span>
<span class="linenos"> 327</span><span class="c1">/// \brief Return metadata on catalogs and schemas.</span>
<span class="linenos"> 328</span><span class="c1">///</span>
<span class="linenos"> 329</span><span class="c1">/// \see AdbcConnectionGetObjects</span>
<span class="linenos"> 330</span><span class="cp">#define ADBC_OBJECT_DEPTH_DB_SCHEMAS 2</span>
<span class="linenos"> 331</span><span class="c1">/// \brief Return metadata on catalogs, schemas, and tables.</span>
<span class="linenos"> 332</span><span class="c1">///</span>
<span class="linenos"> 333</span><span class="c1">/// \see AdbcConnectionGetObjects</span>
<span class="linenos"> 334</span><span class="cp">#define ADBC_OBJECT_DEPTH_TABLES 3</span>
<span class="linenos"> 335</span><span class="c1">/// \brief Return metadata on catalogs, schemas, tables, and columns.</span>
<span class="linenos"> 336</span><span class="c1">///</span>
<span class="linenos"> 337</span><span class="c1">/// \see AdbcConnectionGetObjects</span>
<span class="linenos"> 338</span><span class="cp">#define ADBC_OBJECT_DEPTH_COLUMNS ADBC_OBJECT_DEPTH_ALL</span>
<span class="linenos"> 339</span>
<span class="linenos"> 340</span><span class="c1">/// \brief The name of the canonical option for whether autocommit is</span>
<span class="linenos"> 341</span><span class="c1">/// enabled.</span>
<span class="linenos"> 342</span><span class="c1">///</span>
<span class="linenos"> 343</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 344</span><span class="cp">#define ADBC_CONNECTION_OPTION_AUTOCOMMIT &quot;adbc.connection.autocommit&quot;</span>
<span class="linenos"> 345</span>
<span class="linenos"> 346</span><span class="c1">/// \brief The name of the canonical option for whether the current</span>
<span class="linenos"> 347</span><span class="c1">/// connection should be restricted to being read-only.</span>
<span class="linenos"> 348</span><span class="c1">///</span>
<span class="linenos"> 349</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 350</span><span class="cp">#define ADBC_CONNECTION_OPTION_READ_ONLY &quot;adbc.connection.readonly&quot;</span>
<span class="linenos"> 351</span>
<span class="linenos"> 352</span><span class="c1">/// \brief The name of the canonical option for setting the isolation</span>
<span class="linenos"> 353</span><span class="c1">/// level of a transaction.</span>
<span class="linenos"> 354</span><span class="c1">///</span>
<span class="linenos"> 355</span><span class="c1">/// Should only be used in conjunction with autocommit disabled and</span>
<span class="linenos"> 356</span><span class="c1">/// AdbcConnectionCommit / AdbcConnectionRollback. If the desired</span>
<span class="linenos"> 357</span><span class="c1">/// isolation level is not supported by a driver, it should return an</span>
<span class="linenos"> 358</span><span class="c1">/// appropriate error.</span>
<span class="linenos"> 359</span><span class="c1">///</span>
<span class="linenos"> 360</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 361</span><span class="cp">#define ADBC_CONNECTION_OPTION_ISOLATION_LEVEL \</span>
<span class="linenos"> 362</span><span class="cp"> &quot;adbc.connection.transaction.isolation_level&quot;</span>
<span class="linenos"> 363</span>
<span class="linenos"> 364</span><span class="c1">/// \brief Use database or driver default isolation level</span>
<span class="linenos"> 365</span><span class="c1">///</span>
<span class="linenos"> 366</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 367</span><span class="cp">#define ADBC_OPTION_ISOLATION_LEVEL_DEFAULT \</span>
<span class="linenos"> 368</span><span class="cp"> &quot;adbc.connection.transaction.isolation.default&quot;</span>
<span class="linenos"> 369</span>
<span class="linenos"> 370</span><span class="c1">/// \brief The lowest isolation level. Dirty reads are allowed, so one</span>
<span class="linenos"> 371</span><span class="c1">/// transaction may see not-yet-committed changes made by others.</span>
<span class="linenos"> 372</span><span class="c1">///</span>
<span class="linenos"> 373</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 374</span><span class="cp">#define ADBC_OPTION_ISOLATION_LEVEL_READ_UNCOMMITTED \</span>
<span class="linenos"> 375</span><span class="cp"> &quot;adbc.connection.transaction.isolation.read_uncommitted&quot;</span>
<span class="linenos"> 376</span>
<span class="linenos"> 377</span><span class="c1">/// \brief Lock-based concurrency control keeps write locks until the</span>
<span class="linenos"> 378</span><span class="c1">/// end of the transaction, but read locks are released as soon as a</span>
<span class="linenos"> 379</span><span class="c1">/// SELECT is performed. Non-repeatable reads can occur in this</span>
<span class="linenos"> 380</span><span class="c1">/// isolation level.</span>
<span class="linenos"> 381</span><span class="c1">///</span>
<span class="linenos"> 382</span><span class="c1">/// More simply put, Read Committed is an isolation level that guarantees</span>
<span class="linenos"> 383</span><span class="c1">/// that any data read is committed at the moment it is read. It simply</span>
<span class="linenos"> 384</span><span class="c1">/// restricts the reader from seeing any intermediate, uncommitted,</span>
<span class="linenos"> 385</span><span class="c1">/// &#39;dirty&#39; reads. It makes no promise whatsoever that if the transaction</span>
<span class="linenos"> 386</span><span class="c1">/// re-issues the read, it will find the same data; data is free to change</span>
<span class="linenos"> 387</span><span class="c1">/// after it is read.</span>
<span class="linenos"> 388</span><span class="c1">///</span>
<span class="linenos"> 389</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 390</span><span class="cp">#define ADBC_OPTION_ISOLATION_LEVEL_READ_COMMITTED \</span>
<span class="linenos"> 391</span><span class="cp"> &quot;adbc.connection.transaction.isolation.read_committed&quot;</span>
<span class="linenos"> 392</span>
<span class="linenos"> 393</span><span class="c1">/// \brief Lock-based concurrency control keeps read AND write locks</span>
<span class="linenos"> 394</span><span class="c1">/// (acquired on selection data) until the end of the transaction.</span>
<span class="linenos"> 395</span><span class="c1">///</span>
<span class="linenos"> 396</span><span class="c1">/// However, range-locks are not managed, so phantom reads can occur.</span>
<span class="linenos"> 397</span><span class="c1">/// Write skew is possible at this isolation level in some systems.</span>
<span class="linenos"> 398</span><span class="c1">///</span>
<span class="linenos"> 399</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 400</span><span class="cp">#define ADBC_OPTION_ISOLATION_LEVEL_REPEATABLE_READ \</span>
<span class="linenos"> 401</span><span class="cp"> &quot;adbc.connection.transaction.isolation.repeatable_read&quot;</span>
<span class="linenos"> 402</span>
<span class="linenos"> 403</span><span class="c1">/// \brief This isolation guarantees that all reads in the transaction</span>
<span class="linenos"> 404</span><span class="c1">/// will see a consistent snapshot of the database and the transaction</span>
<span class="linenos"> 405</span><span class="c1">/// should only successfully commit if no updates conflict with any</span>
<span class="linenos"> 406</span><span class="c1">/// concurrent updates made since that snapshot.</span>
<span class="linenos"> 407</span><span class="c1">///</span>
<span class="linenos"> 408</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 409</span><span class="cp">#define ADBC_OPTION_ISOLATION_LEVEL_SNAPSHOT \</span>
<span class="linenos"> 410</span><span class="cp"> &quot;adbc.connection.transaction.isolation.snapshot&quot;</span>
<span class="linenos"> 411</span>
<span class="linenos"> 412</span><span class="c1">/// \brief Serializability requires read and write locks to be released</span>
<span class="linenos"> 413</span><span class="c1">/// only at the end of the transaction. This includes acquiring range-</span>
<span class="linenos"> 414</span><span class="c1">/// locks when a select query uses a ranged WHERE clause to avoid</span>
<span class="linenos"> 415</span><span class="c1">/// phantom reads.</span>
<span class="linenos"> 416</span><span class="c1">///</span>
<span class="linenos"> 417</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 418</span><span class="cp">#define ADBC_OPTION_ISOLATION_LEVEL_SERIALIZABLE \</span>
<span class="linenos"> 419</span><span class="cp"> &quot;adbc.connection.transaction.isolation.serializable&quot;</span>
<span class="linenos"> 420</span>
<span class="linenos"> 421</span><span class="c1">/// \brief The central distinction between serializability and linearizability</span>
<span class="linenos"> 422</span><span class="c1">/// is that serializability is a global property; a property of an entire</span>
<span class="linenos"> 423</span><span class="c1">/// history of operations and transactions. Linearizability is a local</span>
<span class="linenos"> 424</span><span class="c1">/// property; a property of a single operation/transaction.</span>
<span class="linenos"> 425</span><span class="c1">///</span>
<span class="linenos"> 426</span><span class="c1">/// Linearizability can be viewed as a special case of strict serializability</span>
<span class="linenos"> 427</span><span class="c1">/// where transactions are restricted to consist of a single operation applied</span>
<span class="linenos"> 428</span><span class="c1">/// to a single object.</span>
<span class="linenos"> 429</span><span class="c1">///</span>
<span class="linenos"> 430</span><span class="c1">/// \see AdbcConnectionSetOption</span>
<span class="linenos"> 431</span><span class="cp">#define ADBC_OPTION_ISOLATION_LEVEL_LINEARIZABLE \</span>
<span class="linenos"> 432</span><span class="cp"> &quot;adbc.connection.transaction.isolation.linearizable&quot;</span>
<span class="linenos"> 433</span>
<span class="linenos"> 434</span><span class="c1">/// \defgroup adbc-statement-ingestion Bulk Data Ingestion</span>
<span class="linenos"> 435</span><span class="c1">/// While it is possible to insert data via prepared statements, it can</span>
<span class="linenos"> 436</span><span class="c1">/// be more efficient to explicitly perform a bulk insert. For</span>
<span class="linenos"> 437</span><span class="c1">/// compatible drivers, this can be accomplished by setting up and</span>
<span class="linenos"> 438</span><span class="c1">/// executing a statement. Instead of setting a SQL query or Substrait</span>
<span class="linenos"> 439</span><span class="c1">/// plan, bind the source data via AdbcStatementBind, and set the name</span>
<span class="linenos"> 440</span><span class="c1">/// of the table to be created via AdbcStatementSetOption and the</span>
<span class="linenos"> 441</span><span class="c1">/// options below. Then, call AdbcStatementExecute with</span>
<span class="linenos"> 442</span><span class="c1">/// ADBC_OUTPUT_TYPE_UPDATE.</span>
<span class="linenos"> 443</span><span class="c1">///</span>
<span class="linenos"> 444</span><span class="c1">/// @{</span>
<span class="linenos"> 445</span>
<span class="linenos"> 446</span><span class="c1">/// \brief The name of the target table for a bulk insert.</span>
<span class="linenos"> 447</span><span class="c1">///</span>
<span class="linenos"> 448</span><span class="c1">/// The driver should attempt to create the table if it does not</span>
<span class="linenos"> 449</span><span class="c1">/// exist. If the table exists but has a different schema,</span>
<span class="linenos"> 450</span><span class="c1">/// ADBC_STATUS_ALREADY_EXISTS should be raised. Else, data should be</span>
<span class="linenos"> 451</span><span class="c1">/// appended to the target table.</span>
<span class="linenos"> 452</span><span class="cp">#define ADBC_INGEST_OPTION_TARGET_TABLE &quot;adbc.ingest.target_table&quot;</span>
<span class="linenos"> 453</span><span class="c1">/// \brief Whether to create (the default) or append.</span>
<span class="linenos"> 454</span><span class="cp">#define ADBC_INGEST_OPTION_MODE &quot;adbc.ingest.mode&quot;</span>
<span class="linenos"> 455</span><span class="c1">/// \brief Create the table and insert data; error if the table exists.</span>
<span class="linenos"> 456</span><span class="cp">#define ADBC_INGEST_OPTION_MODE_CREATE &quot;adbc.ingest.mode.create&quot;</span>
<span class="linenos"> 457</span><span class="c1">/// \brief Do not create the table, and insert data; error if the</span>
<span class="linenos"> 458</span><span class="c1">/// table does not exist (ADBC_STATUS_NOT_FOUND) or does not match</span>
<span class="linenos"> 459</span><span class="c1">/// the schema of the data to append (ADBC_STATUS_ALREADY_EXISTS).</span>
<span class="linenos"> 460</span><span class="cp">#define ADBC_INGEST_OPTION_MODE_APPEND &quot;adbc.ingest.mode.append&quot;</span>
<span class="linenos"> 461</span>
<span class="linenos"> 462</span><span class="c1">/// @}</span>
<span class="linenos"> 463</span>
<span class="linenos"> 464</span><span class="c1">/// @}</span>
<span class="linenos"> 465</span>
<span class="linenos"> 466</span><span class="c1">/// \defgroup adbc-database Database Initialization</span>
<span class="linenos"> 467</span><span class="c1">/// Clients first initialize a database, then create a connection</span>
<span class="linenos"> 468</span><span class="c1">/// (below). This gives the implementation a place to initialize and</span>
<span class="linenos"> 469</span><span class="c1">/// own any common connection state. For example, in-memory databases</span>
<span class="linenos"> 470</span><span class="c1">/// can place ownership of the actual database in this object.</span>
<span class="linenos"> 471</span><span class="c1">/// @{</span>
<span class="linenos"> 472</span>
<span class="linenos"> 473</span><span class="c1">/// \brief An instance of a database.</span>
<span class="linenos"> 474</span><span class="c1">///</span>
<span class="linenos"> 475</span><span class="c1">/// Must be kept alive as long as any connections exist.</span>
<span class="linenos"> 476</span><span class="k">struct</span><span class="w"> </span><span class="nc">ADBC_EXPORT</span><span class="w"> </span><span class="n">AdbcDatabase</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 477</span><span class="w"> </span><span class="c1">/// \brief Opaque implementation-defined state.</span>
<span class="linenos"> 478</span><span class="w"> </span><span class="c1">/// This field is NULLPTR iff the connection is uninitialized/freed.</span>
<span class="linenos"> 479</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">private_data</span><span class="p">;</span>
<span class="linenos"> 480</span><span class="w"> </span><span class="c1">/// \brief The associated driver (used by the driver manager to help</span>
<span class="linenos"> 481</span><span class="w"> </span><span class="c1">/// track state).</span>
<span class="linenos"> 482</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDriver</span><span class="o">*</span><span class="w"> </span><span class="n">private_driver</span><span class="p">;</span>
<span class="linenos"> 483</span><span class="p">};</span>
<span class="linenos"> 484</span>
<span class="linenos"> 485</span><span class="c1">/// @}</span>
<span class="linenos"> 486</span>
<span class="linenos"> 487</span><span class="c1">/// \defgroup adbc-connection Connection Establishment</span>
<span class="linenos"> 488</span><span class="c1">/// Functions for creating, using, and releasing database connections.</span>
<span class="linenos"> 489</span><span class="c1">/// @{</span>
<span class="linenos"> 490</span>
<span class="linenos"> 491</span><span class="c1">/// \brief An active database connection.</span>
<span class="linenos"> 492</span><span class="c1">///</span>
<span class="linenos"> 493</span><span class="c1">/// Provides methods for query execution, managing prepared</span>
<span class="linenos"> 494</span><span class="c1">/// statements, using transactions, and so on.</span>
<span class="linenos"> 495</span><span class="c1">///</span>
<span class="linenos"> 496</span><span class="c1">/// Connections are not required to be thread-safe, but they can be</span>
<span class="linenos"> 497</span><span class="c1">/// used from multiple threads so long as clients take care to</span>
<span class="linenos"> 498</span><span class="c1">/// serialize accesses to a connection.</span>
<span class="linenos"> 499</span><span class="k">struct</span><span class="w"> </span><span class="nc">ADBC_EXPORT</span><span class="w"> </span><span class="n">AdbcConnection</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 500</span><span class="w"> </span><span class="c1">/// \brief Opaque implementation-defined state.</span>
<span class="linenos"> 501</span><span class="w"> </span><span class="c1">/// This field is NULLPTR iff the connection is uninitialized/freed.</span>
<span class="linenos"> 502</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">private_data</span><span class="p">;</span>
<span class="linenos"> 503</span><span class="w"> </span><span class="c1">/// \brief The associated driver (used by the driver manager to help</span>
<span class="linenos"> 504</span><span class="w"> </span><span class="c1">/// track state).</span>
<span class="linenos"> 505</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDriver</span><span class="o">*</span><span class="w"> </span><span class="n">private_driver</span><span class="p">;</span>
<span class="linenos"> 506</span><span class="p">};</span>
<span class="linenos"> 507</span>
<span class="linenos"> 508</span><span class="c1">/// @}</span>
<span class="linenos"> 509</span>
<span class="linenos"> 510</span><span class="c1">/// \defgroup adbc-statement Managing Statements</span>
<span class="linenos"> 511</span><span class="c1">/// Applications should first initialize a statement with</span>
<span class="linenos"> 512</span><span class="c1">/// AdbcStatementNew. Then, the statement should be configured with</span>
<span class="linenos"> 513</span><span class="c1">/// functions like AdbcStatementSetSqlQuery and</span>
<span class="linenos"> 514</span><span class="c1">/// AdbcStatementSetOption. Finally, the statement can be executed</span>
<span class="linenos"> 515</span><span class="c1">/// with AdbcStatementExecuteQuery (or call AdbcStatementPrepare first</span>
<span class="linenos"> 516</span><span class="c1">/// to turn it into a prepared statement instead).</span>
<span class="linenos"> 517</span><span class="c1">/// @{</span>
<span class="linenos"> 518</span>
<span class="linenos"> 519</span><span class="c1">/// \brief A container for all state needed to execute a database</span>
<span class="linenos"> 520</span><span class="c1">/// query, such as the query itself, parameters for prepared</span>
<span class="linenos"> 521</span><span class="c1">/// statements, driver parameters, etc.</span>
<span class="linenos"> 522</span><span class="c1">///</span>
<span class="linenos"> 523</span><span class="c1">/// Statements may represent queries or prepared statements.</span>
<span class="linenos"> 524</span><span class="c1">///</span>
<span class="linenos"> 525</span><span class="c1">/// Statements may be used multiple times and can be reconfigured</span>
<span class="linenos"> 526</span><span class="c1">/// (e.g. they can be reused to execute multiple different queries).</span>
<span class="linenos"> 527</span><span class="c1">/// However, executing a statement (and changing certain other state)</span>
<span class="linenos"> 528</span><span class="c1">/// will invalidate result sets obtained prior to that execution.</span>
<span class="linenos"> 529</span><span class="c1">///</span>
<span class="linenos"> 530</span><span class="c1">/// Multiple statements may be created from a single connection.</span>
<span class="linenos"> 531</span><span class="c1">/// However, the driver may block or error if they are used</span>
<span class="linenos"> 532</span><span class="c1">/// concurrently (whether from a single thread or multiple threads).</span>
<span class="linenos"> 533</span><span class="c1">///</span>
<span class="linenos"> 534</span><span class="c1">/// Statements are not required to be thread-safe, but they can be</span>
<span class="linenos"> 535</span><span class="c1">/// used from multiple threads so long as clients take care to</span>
<span class="linenos"> 536</span><span class="c1">/// serialize accesses to a statement.</span>
<span class="linenos"> 537</span><span class="k">struct</span><span class="w"> </span><span class="nc">ADBC_EXPORT</span><span class="w"> </span><span class="n">AdbcStatement</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 538</span><span class="w"> </span><span class="c1">/// \brief Opaque implementation-defined state.</span>
<span class="linenos"> 539</span><span class="w"> </span><span class="c1">/// This field is NULLPTR iff the connection is uninitialized/freed.</span>
<span class="linenos"> 540</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">private_data</span><span class="p">;</span>
<span class="linenos"> 541</span>
<span class="linenos"> 542</span><span class="w"> </span><span class="c1">/// \brief The associated driver (used by the driver manager to help</span>
<span class="linenos"> 543</span><span class="w"> </span><span class="c1">/// track state).</span>
<span class="linenos"> 544</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDriver</span><span class="o">*</span><span class="w"> </span><span class="n">private_driver</span><span class="p">;</span>
<span class="linenos"> 545</span><span class="p">};</span>
<span class="linenos"> 546</span>
<span class="linenos"> 547</span><span class="c1">/// \defgroup adbc-statement-partition Partitioned Results</span>
<span class="linenos"> 548</span><span class="c1">/// Some backends may internally partition the results. These</span>
<span class="linenos"> 549</span><span class="c1">/// partitions are exposed to clients who may wish to integrate them</span>
<span class="linenos"> 550</span><span class="c1">/// with a threaded or distributed execution model, where partitions</span>
<span class="linenos"> 551</span><span class="c1">/// can be divided among threads or machines and fetched in parallel.</span>
<span class="linenos"> 552</span><span class="c1">///</span>
<span class="linenos"> 553</span><span class="c1">/// To use partitioning, execute the statement with</span>
<span class="linenos"> 554</span><span class="c1">/// AdbcStatementExecutePartitions to get the partition descriptors.</span>
<span class="linenos"> 555</span><span class="c1">/// Call AdbcConnectionReadPartition to turn the individual</span>
<span class="linenos"> 556</span><span class="c1">/// descriptors into ArrowArrayStream instances. This may be done on</span>
<span class="linenos"> 557</span><span class="c1">/// a different connection than the one the partition was created</span>
<span class="linenos"> 558</span><span class="c1">/// with, or even in a different process on another machine.</span>
<span class="linenos"> 559</span><span class="c1">///</span>
<span class="linenos"> 560</span><span class="c1">/// Drivers are not required to support partitioning.</span>
<span class="linenos"> 561</span><span class="c1">///</span>
<span class="linenos"> 562</span><span class="c1">/// @{</span>
<span class="linenos"> 563</span>
<span class="linenos"> 564</span><span class="c1">/// \brief The partitions of a distributed/partitioned result set.</span>
<span class="linenos"> 565</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcPartitions</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 566</span><span class="w"> </span><span class="c1">/// \brief The number of partitions.</span>
<span class="linenos"> 567</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">num_partitions</span><span class="p">;</span>
<span class="linenos"> 568</span>
<span class="linenos"> 569</span><span class="w"> </span><span class="c1">/// \brief The partitions of the result set, where each entry (up to</span>
<span class="linenos"> 570</span><span class="w"> </span><span class="c1">/// num_partitions entries) is an opaque identifier that can be</span>
<span class="linenos"> 571</span><span class="w"> </span><span class="c1">/// passed to AdbcConnectionReadPartition.</span>
<span class="linenos"> 572</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">uint8_t</span><span class="o">**</span><span class="w"> </span><span class="n">partitions</span><span class="p">;</span>
<span class="linenos"> 573</span>
<span class="linenos"> 574</span><span class="w"> </span><span class="c1">/// \brief The length of each corresponding entry in partitions.</span>
<span class="linenos"> 575</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">size_t</span><span class="o">*</span><span class="w"> </span><span class="n">partition_lengths</span><span class="p">;</span>
<span class="linenos"> 576</span>
<span class="linenos"> 577</span><span class="w"> </span><span class="c1">/// \brief Opaque implementation-defined state.</span>
<span class="linenos"> 578</span><span class="w"> </span><span class="c1">/// This field is NULLPTR iff the connection is uninitialized/freed.</span>
<span class="linenos"> 579</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">private_data</span><span class="p">;</span>
<span class="linenos"> 580</span>
<span class="linenos"> 581</span><span class="w"> </span><span class="c1">/// \brief Release the contained partitions.</span>
<span class="linenos"> 582</span><span class="w"> </span><span class="c1">///</span>
<span class="linenos"> 583</span><span class="w"> </span><span class="c1">/// Unlike other structures, this is an embedded callback to make it</span>
<span class="linenos"> 584</span><span class="w"> </span><span class="c1">/// easier for the driver manager and driver to cooperate.</span>
<span class="linenos"> 585</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">release</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcPartitions</span><span class="o">*</span><span class="w"> </span><span class="n">partitions</span><span class="p">);</span>
<span class="linenos"> 586</span><span class="p">};</span>
<span class="linenos"> 587</span>
<span class="linenos"> 588</span><span class="c1">/// @}</span>
<span class="linenos"> 589</span>
<span class="linenos"> 590</span><span class="c1">/// @}</span>
<span class="linenos"> 591</span>
<span class="linenos"> 592</span><span class="c1">/// \defgroup adbc-driver Driver Initialization</span>
<span class="linenos"> 593</span><span class="c1">///</span>
<span class="linenos"> 594</span><span class="c1">/// These functions are intended to help support integration between a</span>
<span class="linenos"> 595</span><span class="c1">/// driver and the driver manager.</span>
<span class="linenos"> 596</span><span class="c1">/// @{</span>
<span class="linenos"> 597</span>
<span class="linenos"> 598</span><span class="c1">/// \brief An instance of an initialized database driver.</span>
<span class="linenos"> 599</span><span class="c1">///</span>
<span class="linenos"> 600</span><span class="c1">/// This provides a common interface for vendor-specific driver</span>
<span class="linenos"> 601</span><span class="c1">/// initialization routines. Drivers should populate this struct, and</span>
<span class="linenos"> 602</span><span class="c1">/// applications can call ADBC functions through this struct, without</span>
<span class="linenos"> 603</span><span class="c1">/// worrying about multiple definitions of the same symbol.</span>
<span class="linenos"> 604</span><span class="k">struct</span><span class="w"> </span><span class="nc">ADBC_EXPORT</span><span class="w"> </span><span class="n">AdbcDriver</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 605</span><span class="w"> </span><span class="c1">/// \brief Opaque driver-defined state.</span>
<span class="linenos"> 606</span><span class="w"> </span><span class="c1">/// This field is NULL if the driver is uninitialized/freed (but</span>
<span class="linenos"> 607</span><span class="w"> </span><span class="c1">/// it need not have a value even if the driver is initialized).</span>
<span class="linenos"> 608</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">private_data</span><span class="p">;</span>
<span class="linenos"> 609</span><span class="w"> </span><span class="c1">/// \brief Opaque driver manager-defined state.</span>
<span class="linenos"> 610</span><span class="w"> </span><span class="c1">/// This field is NULL if the driver is uninitialized/freed (but</span>
<span class="linenos"> 611</span><span class="w"> </span><span class="c1">/// it need not have a value even if the driver is initialized).</span>
<span class="linenos"> 612</span><span class="w"> </span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">private_manager</span><span class="p">;</span>
<span class="linenos"> 613</span>
<span class="linenos"> 614</span><span class="w"> </span><span class="c1">/// \brief Release the driver and perform any cleanup.</span>
<span class="linenos"> 615</span><span class="w"> </span><span class="c1">///</span>
<span class="linenos"> 616</span><span class="w"> </span><span class="c1">/// This is an embedded callback to make it easier for the driver</span>
<span class="linenos"> 617</span><span class="w"> </span><span class="c1">/// manager and driver to cooperate.</span>
<span class="linenos"> 618</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">release</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDriver</span><span class="o">*</span><span class="w"> </span><span class="n">driver</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 619</span>
<span class="linenos"> 620</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">DatabaseInit</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 621</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">DatabaseNew</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 622</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">DatabaseSetOption</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 623</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 624</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">DatabaseRelease</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 625</span>
<span class="linenos"> 626</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionCommit</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 627</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionGetInfo</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">uint32_t</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="p">,</span>
<span class="linenos"> 628</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 629</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionGetObjects</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 630</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">**</span><span class="p">,</span>
<span class="linenos"> 631</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 632</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 633</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionGetTableSchema</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 634</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 635</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowSchema</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 636</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionGetTableTypes</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 637</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 638</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionInit</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 639</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 640</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionNew</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 641</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionSetOption</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 642</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 643</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionReadPartition</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">uint8_t</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 644</span><span class="w"> </span><span class="kt">size_t</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 645</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 646</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionRelease</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 647</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">ConnectionRollback</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 648</span>
<span class="linenos"> 649</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementBind</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArray</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 650</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowSchema</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 651</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementBindStream</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 652</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 653</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementExecuteQuery</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 654</span><span class="w"> </span><span class="kt">int64_t</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 655</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementExecutePartitions</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowSchema</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 656</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcPartitions</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">int64_t</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 657</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 658</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementGetParameterSchema</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 659</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowSchema</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 660</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementNew</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 661</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 662</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementPrepare</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 663</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementRelease</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 664</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementSetOption</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 665</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 666</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementSetSqlQuery</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 667</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 668</span><span class="w"> </span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">StatementSetSubstraitPlan</span><span class="p">)(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">uint8_t</span><span class="o">*</span><span class="p">,</span>
<span class="linenos"> 669</span><span class="w"> </span><span class="kt">size_t</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="p">);</span>
<span class="linenos"> 670</span><span class="p">};</span>
<span class="linenos"> 671</span>
<span class="linenos"> 672</span><span class="c1">/// @}</span>
<span class="linenos"> 673</span>
<span class="linenos"> 674</span><span class="c1">/// \addtogroup adbc-database</span>
<span class="linenos"> 675</span><span class="c1">/// @{</span>
<span class="linenos"> 676</span>
<span class="linenos"> 677</span><span class="c1">/// \brief Allocate a new (but uninitialized) database.</span>
<span class="linenos"> 678</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 679</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcDatabaseNew</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="w"> </span><span class="n">database</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 680</span>
<span class="linenos"> 681</span><span class="c1">/// \brief Set a char* option.</span>
<span class="linenos"> 682</span><span class="c1">///</span>
<span class="linenos"> 683</span><span class="c1">/// Options may be set before AdbcDatabaseInit. Some drivers may</span>
<span class="linenos"> 684</span><span class="c1">/// support setting options after initialization as well.</span>
<span class="linenos"> 685</span><span class="c1">///</span>
<span class="linenos"> 686</span><span class="c1">/// \return ADBC_STATUS_NOT_IMPLEMENTED if the option is not recognized</span>
<span class="linenos"> 687</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 688</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcDatabaseSetOption</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="w"> </span><span class="n">database</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">key</span><span class="p">,</span>
<span class="linenos"> 689</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 690</span>
<span class="linenos"> 691</span><span class="c1">/// \brief Finish setting options and initialize the database.</span>
<span class="linenos"> 692</span><span class="c1">///</span>
<span class="linenos"> 693</span><span class="c1">/// Some drivers may support setting options after initialization</span>
<span class="linenos"> 694</span><span class="c1">/// as well.</span>
<span class="linenos"> 695</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 696</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcDatabaseInit</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="w"> </span><span class="n">database</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 697</span>
<span class="linenos"> 698</span><span class="c1">/// \brief Destroy this database. No connections may exist.</span>
<span class="linenos"> 699</span><span class="c1">/// \param[in] database The database to release.</span>
<span class="linenos"> 700</span><span class="c1">/// \param[out] error An optional location to return an error</span>
<span class="linenos"> 701</span><span class="c1">/// message if necessary.</span>
<span class="linenos"> 702</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 703</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcDatabaseRelease</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="w"> </span><span class="n">database</span><span class="p">,</span>
<span class="linenos"> 704</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 705</span>
<span class="linenos"> 706</span><span class="c1">/// @}</span>
<span class="linenos"> 707</span>
<span class="linenos"> 708</span><span class="c1">/// \addtogroup adbc-connection</span>
<span class="linenos"> 709</span><span class="c1">/// @{</span>
<span class="linenos"> 710</span>
<span class="linenos"> 711</span><span class="c1">/// \brief Allocate a new (but uninitialized) connection.</span>
<span class="linenos"> 712</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 713</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionNew</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos"> 714</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 715</span>
<span class="linenos"> 716</span><span class="c1">/// \brief Set a char* option.</span>
<span class="linenos"> 717</span><span class="c1">///</span>
<span class="linenos"> 718</span><span class="c1">/// Options may be set before AdbcConnectionInit. Some drivers may</span>
<span class="linenos"> 719</span><span class="c1">/// support setting options after initialization as well.</span>
<span class="linenos"> 720</span><span class="c1">///</span>
<span class="linenos"> 721</span><span class="c1">/// \return ADBC_STATUS_NOT_IMPLEMENTED if the option is not recognized</span>
<span class="linenos"> 722</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 723</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionSetOption</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">key</span><span class="p">,</span>
<span class="linenos"> 724</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 725</span>
<span class="linenos"> 726</span><span class="c1">/// \brief Finish setting options and initialize the connection.</span>
<span class="linenos"> 727</span><span class="c1">///</span>
<span class="linenos"> 728</span><span class="c1">/// Some drivers may support setting options after initialization</span>
<span class="linenos"> 729</span><span class="c1">/// as well.</span>
<span class="linenos"> 730</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 731</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionInit</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos"> 732</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcDatabase</span><span class="o">*</span><span class="w"> </span><span class="n">database</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 733</span>
<span class="linenos"> 734</span><span class="c1">/// \brief Destroy this connection.</span>
<span class="linenos"> 735</span><span class="c1">///</span>
<span class="linenos"> 736</span><span class="c1">/// \param[in] connection The connection to release.</span>
<span class="linenos"> 737</span><span class="c1">/// \param[out] error An optional location to return an error</span>
<span class="linenos"> 738</span><span class="c1">/// message if necessary.</span>
<span class="linenos"> 739</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 740</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionRelease</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos"> 741</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 742</span>
<span class="linenos"> 743</span><span class="c1">/// \defgroup adbc-connection-metadata Metadata</span>
<span class="linenos"> 744</span><span class="c1">/// Functions for retrieving metadata about the database.</span>
<span class="linenos"> 745</span><span class="c1">///</span>
<span class="linenos"> 746</span><span class="c1">/// Generally, these functions return an ArrowArrayStream that can be</span>
<span class="linenos"> 747</span><span class="c1">/// consumed to get the metadata as Arrow data. The returned metadata</span>
<span class="linenos"> 748</span><span class="c1">/// has an expected schema given in the function docstring. Schema</span>
<span class="linenos"> 749</span><span class="c1">/// fields are nullable unless otherwise marked. While no</span>
<span class="linenos"> 750</span><span class="c1">/// AdbcStatement is used in these functions, the result set may count</span>
<span class="linenos"> 751</span><span class="c1">/// as an active statement to the driver for the purposes of</span>
<span class="linenos"> 752</span><span class="c1">/// concurrency management (e.g. if the driver has a limit on</span>
<span class="linenos"> 753</span><span class="c1">/// concurrent active statements and it must execute a SQL query</span>
<span class="linenos"> 754</span><span class="c1">/// internally in order to implement the metadata function).</span>
<span class="linenos"> 755</span><span class="c1">///</span>
<span class="linenos"> 756</span><span class="c1">/// Some functions accept &quot;search pattern&quot; arguments, which are</span>
<span class="linenos"> 757</span><span class="c1">/// strings that can contain the special character &quot;%&quot; to match zero</span>
<span class="linenos"> 758</span><span class="c1">/// or more characters, or &quot;_&quot; to match exactly one character. (See</span>
<span class="linenos"> 759</span><span class="c1">/// the documentation of DatabaseMetaData in JDBC or &quot;Pattern Value</span>
<span class="linenos"> 760</span><span class="c1">/// Arguments&quot; in the ODBC documentation.) Escaping is not currently</span>
<span class="linenos"> 761</span><span class="c1">/// supported.</span>
<span class="linenos"> 762</span><span class="c1">///</span>
<span class="linenos"> 763</span><span class="c1">/// @{</span>
<span class="linenos"> 764</span>
<span class="linenos"> 765</span><span class="c1">/// \brief Get metadata about the database/driver.</span>
<span class="linenos"> 766</span><span class="c1">///</span>
<span class="linenos"> 767</span><span class="c1">/// The result is an Arrow dataset with the following schema:</span>
<span class="linenos"> 768</span><span class="c1">///</span>
<span class="linenos"> 769</span><span class="c1">/// Field Name | Field Type</span>
<span class="linenos"> 770</span><span class="c1">/// ----------------------------|------------------------</span>
<span class="linenos"> 771</span><span class="c1">/// info_name | uint32 not null</span>
<span class="linenos"> 772</span><span class="c1">/// info_value | INFO_SCHEMA</span>
<span class="linenos"> 773</span><span class="c1">///</span>
<span class="linenos"> 774</span><span class="c1">/// INFO_SCHEMA is a dense union with members:</span>
<span class="linenos"> 775</span><span class="c1">///</span>
<span class="linenos"> 776</span><span class="c1">/// Field Name (Type Code) | Field Type</span>
<span class="linenos"> 777</span><span class="c1">/// ----------------------------|------------------------</span>
<span class="linenos"> 778</span><span class="c1">/// string_value (0) | utf8</span>
<span class="linenos"> 779</span><span class="c1">/// bool_value (1) | bool</span>
<span class="linenos"> 780</span><span class="c1">/// int64_value (2) | int64</span>
<span class="linenos"> 781</span><span class="c1">/// int32_bitmask (3) | int32</span>
<span class="linenos"> 782</span><span class="c1">/// string_list (4) | list&lt;utf8&gt;</span>
<span class="linenos"> 783</span><span class="c1">/// int32_to_int32_list_map (5) | map&lt;int32, list&lt;int32&gt;&gt;</span>
<span class="linenos"> 784</span><span class="c1">///</span>
<span class="linenos"> 785</span><span class="c1">/// Each metadatum is identified by an integer code. The recognized</span>
<span class="linenos"> 786</span><span class="c1">/// codes are defined as constants. Codes [0, 10_000) are reserved</span>
<span class="linenos"> 787</span><span class="c1">/// for ADBC usage. Drivers/vendors will ignore requests for</span>
<span class="linenos"> 788</span><span class="c1">/// unrecognized codes (the row will be omitted from the result).</span>
<span class="linenos"> 789</span><span class="c1">///</span>
<span class="linenos"> 790</span><span class="c1">/// \param[in] connection The connection to query.</span>
<span class="linenos"> 791</span><span class="c1">/// \param[in] info_codes A list of metadata codes to fetch, or NULL</span>
<span class="linenos"> 792</span><span class="c1">/// to fetch all.</span>
<span class="linenos"> 793</span><span class="c1">/// \param[in] info_codes_length The length of the info_codes</span>
<span class="linenos"> 794</span><span class="c1">/// parameter. Ignored if info_codes is NULL.</span>
<span class="linenos"> 795</span><span class="c1">/// \param[out] out The result set.</span>
<span class="linenos"> 796</span><span class="c1">/// \param[out] error Error details, if an error occurs.</span>
<span class="linenos"> 797</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 798</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionGetInfo</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos"> 799</span><span class="w"> </span><span class="kt">uint32_t</span><span class="o">*</span><span class="w"> </span><span class="n">info_codes</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">info_codes_length</span><span class="p">,</span>
<span class="linenos"> 800</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span>
<span class="linenos"> 801</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 802</span>
<span class="linenos"> 803</span><span class="c1">/// \brief Get a hierarchical view of all catalogs, database schemas,</span>
<span class="linenos"> 804</span><span class="c1">/// tables, and columns.</span>
<span class="linenos"> 805</span><span class="c1">///</span>
<span class="linenos"> 806</span><span class="c1">/// The result is an Arrow dataset with the following schema:</span>
<span class="linenos"> 807</span><span class="c1">///</span>
<span class="linenos"> 808</span><span class="c1">/// | Field Name | Field Type |</span>
<span class="linenos"> 809</span><span class="c1">/// |--------------------------|-------------------------|</span>
<span class="linenos"> 810</span><span class="c1">/// | catalog_name | utf8 |</span>
<span class="linenos"> 811</span><span class="c1">/// | catalog_db_schemas | list&lt;DB_SCHEMA_SCHEMA&gt; |</span>
<span class="linenos"> 812</span><span class="c1">///</span>
<span class="linenos"> 813</span><span class="c1">/// DB_SCHEMA_SCHEMA is a Struct with fields:</span>
<span class="linenos"> 814</span><span class="c1">///</span>
<span class="linenos"> 815</span><span class="c1">/// | Field Name | Field Type |</span>
<span class="linenos"> 816</span><span class="c1">/// |--------------------------|-------------------------|</span>
<span class="linenos"> 817</span><span class="c1">/// | db_schema_name | utf8 |</span>
<span class="linenos"> 818</span><span class="c1">/// | db_schema_tables | list&lt;TABLE_SCHEMA&gt; |</span>
<span class="linenos"> 819</span><span class="c1">///</span>
<span class="linenos"> 820</span><span class="c1">/// TABLE_SCHEMA is a Struct with fields:</span>
<span class="linenos"> 821</span><span class="c1">///</span>
<span class="linenos"> 822</span><span class="c1">/// | Field Name | Field Type |</span>
<span class="linenos"> 823</span><span class="c1">/// |--------------------------|-------------------------|</span>
<span class="linenos"> 824</span><span class="c1">/// | table_name | utf8 not null |</span>
<span class="linenos"> 825</span><span class="c1">/// | table_type | utf8 not null |</span>
<span class="linenos"> 826</span><span class="c1">/// | table_columns | list&lt;COLUMN_SCHEMA&gt; |</span>
<span class="linenos"> 827</span><span class="c1">/// | table_constraints | list&lt;CONSTRAINT_SCHEMA&gt; |</span>
<span class="linenos"> 828</span><span class="c1">///</span>
<span class="linenos"> 829</span><span class="c1">/// COLUMN_SCHEMA is a Struct with fields:</span>
<span class="linenos"> 830</span><span class="c1">///</span>
<span class="linenos"> 831</span><span class="c1">/// | Field Name | Field Type | Comments |</span>
<span class="linenos"> 832</span><span class="c1">/// |--------------------------|-------------------------|----------|</span>
<span class="linenos"> 833</span><span class="c1">/// | column_name | utf8 not null | |</span>
<span class="linenos"> 834</span><span class="c1">/// | ordinal_position | int32 | (1) |</span>
<span class="linenos"> 835</span><span class="c1">/// | remarks | utf8 | (2) |</span>
<span class="linenos"> 836</span><span class="c1">/// | xdbc_data_type | int16 | (3) |</span>
<span class="linenos"> 837</span><span class="c1">/// | xdbc_type_name | utf8 | (3) |</span>
<span class="linenos"> 838</span><span class="c1">/// | xdbc_column_size | int32 | (3) |</span>
<span class="linenos"> 839</span><span class="c1">/// | xdbc_decimal_digits | int16 | (3) |</span>
<span class="linenos"> 840</span><span class="c1">/// | xdbc_num_prec_radix | int16 | (3) |</span>
<span class="linenos"> 841</span><span class="c1">/// | xdbc_nullable | int16 | (3) |</span>
<span class="linenos"> 842</span><span class="c1">/// | xdbc_column_def | utf8 | (3) |</span>
<span class="linenos"> 843</span><span class="c1">/// | xdbc_sql_data_type | int16 | (3) |</span>
<span class="linenos"> 844</span><span class="c1">/// | xdbc_datetime_sub | int16 | (3) |</span>
<span class="linenos"> 845</span><span class="c1">/// | xdbc_char_octet_length | int32 | (3) |</span>
<span class="linenos"> 846</span><span class="c1">/// | xdbc_is_nullable | utf8 | (3) |</span>
<span class="linenos"> 847</span><span class="c1">/// | xdbc_scope_catalog | utf8 | (3) |</span>
<span class="linenos"> 848</span><span class="c1">/// | xdbc_scope_schema | utf8 | (3) |</span>
<span class="linenos"> 849</span><span class="c1">/// | xdbc_scope_table | utf8 | (3) |</span>
<span class="linenos"> 850</span><span class="c1">/// | xdbc_is_autoincrement | bool | (3) |</span>
<span class="linenos"> 851</span><span class="c1">/// | xdbc_is_generatedcolumn | bool | (3) |</span>
<span class="linenos"> 852</span><span class="c1">///</span>
<span class="linenos"> 853</span><span class="c1">/// 1. The column&#39;s ordinal position in the table (starting from 1).</span>
<span class="linenos"> 854</span><span class="c1">/// 2. Database-specific description of the column.</span>
<span class="linenos"> 855</span><span class="c1">/// 3. Optional value. Should be null if not supported by the driver.</span>
<span class="linenos"> 856</span><span class="c1">/// xdbc_ values are meant to provide JDBC/ODBC-compatible metadata</span>
<span class="linenos"> 857</span><span class="c1">/// in an agnostic manner.</span>
<span class="linenos"> 858</span><span class="c1">///</span>
<span class="linenos"> 859</span><span class="c1">/// CONSTRAINT_SCHEMA is a Struct with fields:</span>
<span class="linenos"> 860</span><span class="c1">///</span>
<span class="linenos"> 861</span><span class="c1">/// | Field Name | Field Type | Comments |</span>
<span class="linenos"> 862</span><span class="c1">/// |--------------------------|-------------------------|----------|</span>
<span class="linenos"> 863</span><span class="c1">/// | constraint_name | utf8 | |</span>
<span class="linenos"> 864</span><span class="c1">/// | constraint_type | utf8 not null | (1) |</span>
<span class="linenos"> 865</span><span class="c1">/// | constraint_column_names | list&lt;utf8&gt; not null | (2) |</span>
<span class="linenos"> 866</span><span class="c1">/// | constraint_column_usage | list&lt;USAGE_SCHEMA&gt; | (3) |</span>
<span class="linenos"> 867</span><span class="c1">///</span>
<span class="linenos"> 868</span><span class="c1">/// 1. One of &#39;CHECK&#39;, &#39;FOREIGN KEY&#39;, &#39;PRIMARY KEY&#39;, or &#39;UNIQUE&#39;.</span>
<span class="linenos"> 869</span><span class="c1">/// 2. The columns on the current table that are constrained, in</span>
<span class="linenos"> 870</span><span class="c1">/// order.</span>
<span class="linenos"> 871</span><span class="c1">/// 3. For FOREIGN KEY only, the referenced table and columns.</span>
<span class="linenos"> 872</span><span class="c1">///</span>
<span class="linenos"> 873</span><span class="c1">/// USAGE_SCHEMA is a Struct with fields:</span>
<span class="linenos"> 874</span><span class="c1">///</span>
<span class="linenos"> 875</span><span class="c1">/// | Field Name | Field Type |</span>
<span class="linenos"> 876</span><span class="c1">/// |--------------------------|-------------------------|</span>
<span class="linenos"> 877</span><span class="c1">/// | fk_catalog | utf8 |</span>
<span class="linenos"> 878</span><span class="c1">/// | fk_db_schema | utf8 |</span>
<span class="linenos"> 879</span><span class="c1">/// | fk_table | utf8 not null |</span>
<span class="linenos"> 880</span><span class="c1">/// | fk_column_name | utf8 not null |</span>
<span class="linenos"> 881</span><span class="c1">///</span>
<span class="linenos"> 882</span><span class="c1">/// \param[in] connection The database connection.</span>
<span class="linenos"> 883</span><span class="c1">/// \param[in] depth The level of nesting to display. If 0, display</span>
<span class="linenos"> 884</span><span class="c1">/// all levels. If 1, display only catalogs (i.e. catalog_schemas</span>
<span class="linenos"> 885</span><span class="c1">/// will be null). If 2, display only catalogs and schemas</span>
<span class="linenos"> 886</span><span class="c1">/// (i.e. db_schema_tables will be null), and so on.</span>
<span class="linenos"> 887</span><span class="c1">/// \param[in] catalog Only show tables in the given catalog. If NULL,</span>
<span class="linenos"> 888</span><span class="c1">/// do not filter by catalog. If an empty string, only show tables</span>
<span class="linenos"> 889</span><span class="c1">/// without a catalog. May be a search pattern (see section</span>
<span class="linenos"> 890</span><span class="c1">/// documentation).</span>
<span class="linenos"> 891</span><span class="c1">/// \param[in] db_schema Only show tables in the given database schema. If</span>
<span class="linenos"> 892</span><span class="c1">/// NULL, do not filter by database schema. If an empty string, only show</span>
<span class="linenos"> 893</span><span class="c1">/// tables without a database schema. May be a search pattern (see section</span>
<span class="linenos"> 894</span><span class="c1">/// documentation).</span>
<span class="linenos"> 895</span><span class="c1">/// \param[in] table_name Only show tables with the given name. If NULL, do not</span>
<span class="linenos"> 896</span><span class="c1">/// filter by name. May be a search pattern (see section documentation).</span>
<span class="linenos"> 897</span><span class="c1">/// \param[in] table_type Only show tables matching one of the given table</span>
<span class="linenos"> 898</span><span class="c1">/// types. If NULL, show tables of any type. Valid table types can be fetched</span>
<span class="linenos"> 899</span><span class="c1">/// from GetTableTypes. Terminate the list with a NULL entry.</span>
<span class="linenos"> 900</span><span class="c1">/// \param[in] column_name Only show columns with the given name. If</span>
<span class="linenos"> 901</span><span class="c1">/// NULL, do not filter by name. May be a search pattern (see</span>
<span class="linenos"> 902</span><span class="c1">/// section documentation).</span>
<span class="linenos"> 903</span><span class="c1">/// \param[out] out The result set.</span>
<span class="linenos"> 904</span><span class="c1">/// \param[out] error Error details, if an error occurs.</span>
<span class="linenos"> 905</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 906</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionGetObjects</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">depth</span><span class="p">,</span>
<span class="linenos"> 907</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">catalog</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">db_schema</span><span class="p">,</span>
<span class="linenos"> 908</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">table_name</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">**</span><span class="w"> </span><span class="n">table_type</span><span class="p">,</span>
<span class="linenos"> 909</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">column_name</span><span class="p">,</span>
<span class="linenos"> 910</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span>
<span class="linenos"> 911</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 912</span>
<span class="linenos"> 913</span><span class="c1">/// \brief Get the Arrow schema of a table.</span>
<span class="linenos"> 914</span><span class="c1">///</span>
<span class="linenos"> 915</span><span class="c1">/// \param[in] connection The database connection.</span>
<span class="linenos"> 916</span><span class="c1">/// \param[in] catalog The catalog (or nullptr if not applicable).</span>
<span class="linenos"> 917</span><span class="c1">/// \param[in] db_schema The database schema (or nullptr if not applicable).</span>
<span class="linenos"> 918</span><span class="c1">/// \param[in] table_name The table name.</span>
<span class="linenos"> 919</span><span class="c1">/// \param[out] schema The table schema.</span>
<span class="linenos"> 920</span><span class="c1">/// \param[out] error Error details, if an error occurs.</span>
<span class="linenos"> 921</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 922</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionGetTableSchema</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos"> 923</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">catalog</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">db_schema</span><span class="p">,</span>
<span class="linenos"> 924</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">table_name</span><span class="p">,</span>
<span class="linenos"> 925</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowSchema</span><span class="o">*</span><span class="w"> </span><span class="n">schema</span><span class="p">,</span>
<span class="linenos"> 926</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 927</span>
<span class="linenos"> 928</span><span class="c1">/// \brief Get a list of table types in the database.</span>
<span class="linenos"> 929</span><span class="c1">///</span>
<span class="linenos"> 930</span><span class="c1">/// The result is an Arrow dataset with the following schema:</span>
<span class="linenos"> 931</span><span class="c1">///</span>
<span class="linenos"> 932</span><span class="c1">/// Field Name | Field Type</span>
<span class="linenos"> 933</span><span class="c1">/// ---------------|--------------</span>
<span class="linenos"> 934</span><span class="c1">/// table_type | utf8 not null</span>
<span class="linenos"> 935</span><span class="c1">///</span>
<span class="linenos"> 936</span><span class="c1">/// \param[in] connection The database connection.</span>
<span class="linenos"> 937</span><span class="c1">/// \param[out] out The result set.</span>
<span class="linenos"> 938</span><span class="c1">/// \param[out] error Error details, if an error occurs.</span>
<span class="linenos"> 939</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 940</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionGetTableTypes</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos"> 941</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span>
<span class="linenos"> 942</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 943</span>
<span class="linenos"> 944</span><span class="c1">/// @}</span>
<span class="linenos"> 945</span>
<span class="linenos"> 946</span><span class="c1">/// \defgroup adbc-connection-partition Partitioned Results</span>
<span class="linenos"> 947</span><span class="c1">/// Some databases may internally partition the results. These</span>
<span class="linenos"> 948</span><span class="c1">/// partitions are exposed to clients who may wish to integrate them</span>
<span class="linenos"> 949</span><span class="c1">/// with a threaded or distributed execution model, where partitions</span>
<span class="linenos"> 950</span><span class="c1">/// can be divided among threads or machines for processing.</span>
<span class="linenos"> 951</span><span class="c1">///</span>
<span class="linenos"> 952</span><span class="c1">/// Drivers are not required to support partitioning.</span>
<span class="linenos"> 953</span><span class="c1">///</span>
<span class="linenos"> 954</span><span class="c1">/// Partitions are not ordered. If the result set is sorted,</span>
<span class="linenos"> 955</span><span class="c1">/// implementations should return a single partition.</span>
<span class="linenos"> 956</span><span class="c1">///</span>
<span class="linenos"> 957</span><span class="c1">/// @{</span>
<span class="linenos"> 958</span>
<span class="linenos"> 959</span><span class="c1">/// \brief Construct a statement for a partition of a query. The</span>
<span class="linenos"> 960</span><span class="c1">/// results can then be read independently.</span>
<span class="linenos"> 961</span><span class="c1">///</span>
<span class="linenos"> 962</span><span class="c1">/// A partition can be retrieved from AdbcPartitions.</span>
<span class="linenos"> 963</span><span class="c1">///</span>
<span class="linenos"> 964</span><span class="c1">/// \param[in] connection The connection to use. This does not have</span>
<span class="linenos"> 965</span><span class="c1">/// to be the same connection that the partition was created on.</span>
<span class="linenos"> 966</span><span class="c1">/// \param[in] serialized_partition The partition descriptor.</span>
<span class="linenos"> 967</span><span class="c1">/// \param[in] serialized_length The partition descriptor length.</span>
<span class="linenos"> 968</span><span class="c1">/// \param[out] out The result set.</span>
<span class="linenos"> 969</span><span class="c1">/// \param[out] error Error details, if an error occurs.</span>
<span class="linenos"> 970</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 971</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionReadPartition</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos"> 972</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">uint8_t</span><span class="o">*</span><span class="w"> </span><span class="n">serialized_partition</span><span class="p">,</span>
<span class="linenos"> 973</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">serialized_length</span><span class="p">,</span>
<span class="linenos"> 974</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span>
<span class="linenos"> 975</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 976</span>
<span class="linenos"> 977</span><span class="c1">/// @}</span>
<span class="linenos"> 978</span>
<span class="linenos"> 979</span><span class="c1">/// \defgroup adbc-connection-transaction Transaction Semantics</span>
<span class="linenos"> 980</span><span class="c1">///</span>
<span class="linenos"> 981</span><span class="c1">/// Connections start out in auto-commit mode by default (if</span>
<span class="linenos"> 982</span><span class="c1">/// applicable for the given vendor). Use AdbcConnectionSetOption and</span>
<span class="linenos"> 983</span><span class="c1">/// ADBC_CONNECTION_OPTION_AUTO_COMMIT to change this.</span>
<span class="linenos"> 984</span><span class="c1">///</span>
<span class="linenos"> 985</span><span class="c1">/// @{</span>
<span class="linenos"> 986</span>
<span class="linenos"> 987</span><span class="c1">/// \brief Commit any pending transactions. Only used if autocommit is</span>
<span class="linenos"> 988</span><span class="c1">/// disabled.</span>
<span class="linenos"> 989</span><span class="c1">///</span>
<span class="linenos"> 990</span><span class="c1">/// Behavior is undefined if this is mixed with SQL transaction</span>
<span class="linenos"> 991</span><span class="c1">/// statements.</span>
<span class="linenos"> 992</span><span class="n">ADBC_EXPORT</span>
<span class="linenos"> 993</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionCommit</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos"> 994</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos"> 995</span>
<span class="linenos"> 996</span><span class="c1">/// \brief Roll back any pending transactions. Only used if autocommit</span>
<span class="linenos"> 997</span><span class="c1">/// is disabled.</span>
<span class="linenos"> 998</span><span class="c1">///</span>
<span class="linenos"> 999</span><span class="c1">/// Behavior is undefined if this is mixed with SQL transaction</span>
<span class="linenos">1000</span><span class="c1">/// statements.</span>
<span class="linenos">1001</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1002</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcConnectionRollback</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos">1003</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos">1004</span>
<span class="linenos">1005</span><span class="c1">/// @}</span>
<span class="linenos">1006</span>
<span class="linenos">1007</span><span class="c1">/// @}</span>
<span class="linenos">1008</span>
<span class="linenos">1009</span><span class="c1">/// \addtogroup adbc-statement</span>
<span class="linenos">1010</span><span class="c1">/// @{</span>
<span class="linenos">1011</span>
<span class="linenos">1012</span><span class="c1">/// \brief Create a new statement for a given connection.</span>
<span class="linenos">1013</span><span class="c1">///</span>
<span class="linenos">1014</span><span class="c1">/// Set options on the statement, then call AdbcStatementExecuteQuery</span>
<span class="linenos">1015</span><span class="c1">/// or AdbcStatementPrepare.</span>
<span class="linenos">1016</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1017</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcStatementNew</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcConnection</span><span class="o">*</span><span class="w"> </span><span class="n">connection</span><span class="p">,</span>
<span class="linenos">1018</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="w"> </span><span class="n">statement</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos">1019</span>
<span class="linenos">1020</span><span class="c1">/// \brief Destroy a statement.</span>
<span class="linenos">1021</span><span class="c1">/// \param[in] statement The statement to release.</span>
<span class="linenos">1022</span><span class="c1">/// \param[out] error An optional location to return an error</span>
<span class="linenos">1023</span><span class="c1">/// message if necessary.</span>
<span class="linenos">1024</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1025</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcStatementRelease</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="w"> </span><span class="n">statement</span><span class="p">,</span>
<span class="linenos">1026</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos">1027</span>
<span class="linenos">1028</span><span class="c1">/// \brief Execute a statement and get the results.</span>
<span class="linenos">1029</span><span class="c1">///</span>
<span class="linenos">1030</span><span class="c1">/// This invalidates any prior result sets.</span>
<span class="linenos">1031</span><span class="c1">///</span>
<span class="linenos">1032</span><span class="c1">/// \param[in] statement The statement to execute.</span>
<span class="linenos">1033</span><span class="c1">/// \param[out] out The results. Pass NULL if the client does not</span>
<span class="linenos">1034</span><span class="c1">/// expect a result set.</span>
<span class="linenos">1035</span><span class="c1">/// \param[out] rows_affected The number of rows affected if known,</span>
<span class="linenos">1036</span><span class="c1">/// else -1. Pass NULL if the client does not want this information.</span>
<span class="linenos">1037</span><span class="c1">/// \param[out] error An optional location to return an error</span>
<span class="linenos">1038</span><span class="c1">/// message if necessary.</span>
<span class="linenos">1039</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1040</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcStatementExecuteQuery</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="w"> </span><span class="n">statement</span><span class="p">,</span>
<span class="linenos">1041</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span>
<span class="linenos">1042</span><span class="w"> </span><span class="kt">int64_t</span><span class="o">*</span><span class="w"> </span><span class="n">rows_affected</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos">1043</span>
<span class="linenos">1044</span><span class="c1">/// \brief Turn this statement into a prepared statement to be</span>
<span class="linenos">1045</span><span class="c1">/// executed multiple times.</span>
<span class="linenos">1046</span><span class="c1">///</span>
<span class="linenos">1047</span><span class="c1">/// This invalidates any prior result sets.</span>
<span class="linenos">1048</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1049</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcStatementPrepare</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="w"> </span><span class="n">statement</span><span class="p">,</span>
<span class="linenos">1050</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos">1051</span>
<span class="linenos">1052</span><span class="c1">/// \defgroup adbc-statement-sql SQL Semantics</span>
<span class="linenos">1053</span><span class="c1">/// Functions for executing SQL queries, or querying SQL-related</span>
<span class="linenos">1054</span><span class="c1">/// metadata. Drivers are not required to support both SQL and</span>
<span class="linenos">1055</span><span class="c1">/// Substrait semantics. If they do, it may be via converting</span>
<span class="linenos">1056</span><span class="c1">/// between representations internally.</span>
<span class="linenos">1057</span><span class="c1">/// @{</span>
<span class="linenos">1058</span>
<span class="linenos">1059</span><span class="c1">/// \brief Set the SQL query to execute.</span>
<span class="linenos">1060</span><span class="c1">///</span>
<span class="linenos">1061</span><span class="c1">/// The query can then be executed with AdbcStatementExecute. For</span>
<span class="linenos">1062</span><span class="c1">/// queries expected to be executed repeatedly, AdbcStatementPrepare</span>
<span class="linenos">1063</span><span class="c1">/// the statement first.</span>
<span class="linenos">1064</span><span class="c1">///</span>
<span class="linenos">1065</span><span class="c1">/// \param[in] statement The statement.</span>
<span class="linenos">1066</span><span class="c1">/// \param[in] query The query to execute.</span>
<span class="linenos">1067</span><span class="c1">/// \param[out] error Error details, if an error occurs.</span>
<span class="linenos">1068</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1069</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcStatementSetSqlQuery</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="w"> </span><span class="n">statement</span><span class="p">,</span>
<span class="linenos">1070</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">query</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos">1071</span>
<span class="linenos">1072</span><span class="c1">/// @}</span>
<span class="linenos">1073</span>
<span class="linenos">1074</span><span class="c1">/// \defgroup adbc-statement-substrait Substrait Semantics</span>
<span class="linenos">1075</span><span class="c1">/// Functions for executing Substrait plans, or querying</span>
<span class="linenos">1076</span><span class="c1">/// Substrait-related metadata. Drivers are not required to support</span>
<span class="linenos">1077</span><span class="c1">/// both SQL and Substrait semantics. If they do, it may be via</span>
<span class="linenos">1078</span><span class="c1">/// converting between representations internally.</span>
<span class="linenos">1079</span><span class="c1">/// @{</span>
<span class="linenos">1080</span>
<span class="linenos">1081</span><span class="c1">/// \brief Set the Substrait plan to execute.</span>
<span class="linenos">1082</span><span class="c1">///</span>
<span class="linenos">1083</span><span class="c1">/// The query can then be executed with AdbcStatementExecute. For</span>
<span class="linenos">1084</span><span class="c1">/// queries expected to be executed repeatedly, AdbcStatementPrepare</span>
<span class="linenos">1085</span><span class="c1">/// the statement first.</span>
<span class="linenos">1086</span><span class="c1">///</span>
<span class="linenos">1087</span><span class="c1">/// \param[in] statement The statement.</span>
<span class="linenos">1088</span><span class="c1">/// \param[in] plan The serialized substrait.Plan to execute.</span>
<span class="linenos">1089</span><span class="c1">/// \param[in] length The length of the serialized plan.</span>
<span class="linenos">1090</span><span class="c1">/// \param[out] error Error details, if an error occurs.</span>
<span class="linenos">1091</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1092</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcStatementSetSubstraitPlan</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="w"> </span><span class="n">statement</span><span class="p">,</span>
<span class="linenos">1093</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">uint8_t</span><span class="o">*</span><span class="w"> </span><span class="n">plan</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">length</span><span class="p">,</span>
<span class="linenos">1094</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos">1095</span>
<span class="linenos">1096</span><span class="c1">/// @}</span>
<span class="linenos">1097</span>
<span class="linenos">1098</span><span class="c1">/// \brief Bind Arrow data. This can be used for bulk inserts or</span>
<span class="linenos">1099</span><span class="c1">/// prepared statements.</span>
<span class="linenos">1100</span><span class="c1">///</span>
<span class="linenos">1101</span><span class="c1">/// \param[in] statement The statement to bind to.</span>
<span class="linenos">1102</span><span class="c1">/// \param[in] values The values to bind. The driver will call the</span>
<span class="linenos">1103</span><span class="c1">/// release callback itself, although it may not do this until the</span>
<span class="linenos">1104</span><span class="c1">/// statement is released.</span>
<span class="linenos">1105</span><span class="c1">/// \param[in] schema The schema of the values to bind.</span>
<span class="linenos">1106</span><span class="c1">/// \param[out] error An optional location to return an error message</span>
<span class="linenos">1107</span><span class="c1">/// if necessary.</span>
<span class="linenos">1108</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1109</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcStatementBind</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="w"> </span><span class="n">statement</span><span class="p">,</span>
<span class="linenos">1110</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArray</span><span class="o">*</span><span class="w"> </span><span class="n">values</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowSchema</span><span class="o">*</span><span class="w"> </span><span class="n">schema</span><span class="p">,</span>
<span class="linenos">1111</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcError</span><span class="o">*</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
<span class="linenos">1112</span>
<span class="linenos">1113</span><span class="c1">/// \brief Bind Arrow data. This can be used for bulk inserts or</span>
<span class="linenos">1114</span><span class="c1">/// prepared statements.</span>
<span class="linenos">1115</span><span class="c1">/// \param[in] statement The statement to bind to.</span>
<span class="linenos">1116</span><span class="c1">/// \param[in] stream The values to bind. The driver will call the</span>
<span class="linenos">1117</span><span class="c1">/// release callback itself, although it may not do this until the</span>
<span class="linenos">1118</span><span class="c1">/// statement is released.</span>
<span class="linenos">1119</span><span class="c1">/// \param[out] error An optional location to return an error message</span>
<span class="linenos">1120</span><span class="c1">/// if necessary.</span>
<span class="linenos">1121</span><span class="n">ADBC_EXPORT</span>
<span class="linenos">1122</span><span class="n">AdbcStatusCode</span><span class="w"> </span><span class="n">AdbcStatementBindStream</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">AdbcStatement</span><span class="o">*</span><span class="w"> </span><span class="n">statement</span><span class="p">,</span>
<span class="linenos">1123</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ArrowArrayStream</span><span class="o">*</span><span class="w"> </span><span class="n">stream</span><span class="p">,</span>
</pre></div>
</div>
</section>
</article>
<footer class="prev-next-footer">
<div class="prev-next-area">
<a class="left-prev"
href="../ADBC.html"
title="previous page">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">previous</p>
<p class="prev-next-title">ADBC: Arrow Database Connectivity</p>
</div>
</a>
<a class="right-next"
href="Go.html"
title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">ADBC Go API Specification</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<div class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item">
<div class="tocsection editthispage">
<a href="https://github.com/apache/arrow/edit/main/docs/source/format/ADBC/C.rst">
<i class="fa-solid fa-pencil"></i>
Edit on GitHub
</a>
</div>
</div>
</div></div>
</div>
<footer class="bd-footer-content">
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script src="../../_static/scripts/bootstrap.js?digest=8d27b9dea8ad943066ae"></script>
<script src="../../_static/scripts/pydata-sphinx-theme.js?digest=8d27b9dea8ad943066ae"></script>
<footer class="bd-footer">
<div class="bd-footer__inner bd-page-width">
<div class="footer-items__start">
<div class="footer-item">
<p class="copyright">
© Copyright 2016-2024 Apache Software Foundation.
Apache Arrow, Arrow, Apache, the Apache feather logo, and the Apache Arrow project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.
<br/>
</p>
</div>
<div class="footer-item">
<p class="sphinx-version">
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 6.2.0.
<br/>
</p>
</div>
</div>
<div class="footer-items__end">
<div class="footer-item">
<p class="theme-version">
Built with the <a href="https://pydata-sphinx-theme.readthedocs.io/en/stable/index.html">PyData Sphinx Theme</a> 0.15.2.
</p></div>
</div>
</div>
</footer>
</body>
</html>