Files
greptimedb/servers/postgres/copy_in/codec/index.html
T

35 lines
7.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The COPY FROM STDIN formats."><title>servers::postgres::copy_in::codec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-1ed95124.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="servers" data-themes="" data-resource-suffix="" data-rustdoc-version="1.98.1 (48a229cea 2026-09-01)" data-channel="1.98.1" data-search-js="search-9944d736.js" data-stringdex-js="stringdex-2da4960a.js" data-settings-js="settings-170eb4bf.js" ><script src="../../../../static.files/storage-41dd4d93.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../../static.files/main-417ebf0a.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-f7c3ffd8.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-044be391.svg"></head><body class="rustdoc mod"><a class="skip-main-content" href="#main-content">Skip to main content</a><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module codec</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../../servers/index.html">servers</a><span class="version">1.4.0-alpha.0</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module codec</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#parsing-and-conversion" title="Parsing and conversion">Parsing and conversion</a></li><li><a href="#options" title="Options">Options</a></li></ul><h3><a href="#enums">Module Items</a></h3><ul class="block"><li><a href="#enums" title="Enums">Enums</a></li><li><a href="#traits" title="Traits">Traits</a></li><li><a href="#types" title="Type Aliases">Type Aliases</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In servers::<wbr>postgres::<wbr>copy_<wbr>in</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content" tabindex="-1"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../../index.html">servers</a>::<wbr><a href="../../index.html">postgres</a>::<wbr><a href="../index.html">copy_in</a></div><h1>Module <span>codec</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../../src/servers/postgres/copy_in/codec.rs.html#15-90">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The COPY FROM STDIN formats.</p>
<p><a href="enum.CopyFormat.html" title="enum servers::postgres::copy_in::codec::CopyFormat"><code>CopyFormat</code></a> is the closed, explicit set of supported formats — a
small enum over the real implementations rather than a generic
format framework. Each variant carries its validated options and
its rules are stated where they apply: a variant’s match arms in
the copy lifecycle (see the parent module) decide whether a target
table is required, how the <code>CopyData</code> bytes are consumed, and which
existing ingestion pipeline completes the copy. Adding a format is
a normal extension: a new variant plus its arms.</p>
<h2 id="parsing-and-conversion"><a class="doc-anchor" href="#parsing-and-conversion">§</a>Parsing and conversion</h2>
<p>Table-bound formats parse incrementally through a <a href="trait.RecordParser.html" title="trait servers::postgres::copy_in::codec::RecordParser"><code>RecordParser</code></a>:
it consumes raw <code>CopyData</code> bytes and emits complete, insertable
rows — one <a href="type.ParsedRow.html" title="type servers::postgres::copy_in::codec::ParsedRow"><code>ParsedRow</code></a> per record, in the order of the targeted
columns. <code>csv</code> delegates splitting and typed conversion to
arrow-csv’s incremental decoder (the engine behind
<code>COPY ... FROM 'file.csv'</code>) and turns decoded batches into rows
with the shared <code>api::helper::vectors_to_rows</code>.</p>
<p>Formats that delegate to an existing ingestion pipeline (the
influxdb line protocol) do not parse here at all: the whole payload
is buffered as one bounded request body and completed through that
pipeline, so record boundaries and values stay with the pipeline’s
own parser.</p>
<h2 id="options"><a class="doc-anchor" href="#options">§</a>Options</h2>
<p>The <code>WITH (...)</code> clause is open: every <code>KEY value</code> entry the client
writes is collected into a [<code>CopyOptionSet</code>] (see <code>options</code>)
regardless of whether any format understands it — the statement is
parsed textually (see <code>parse</code>) precisely so options beyond
sqlparser’s COPY grammar can reach the formats. A format builder
takes the options it understands (<code>take_string</code>,
<code>take_single_byte</code>, <code>take_flag</code>, or raw <code>take_value</code> for
format-specific shapes) and rejects the rest with
<code>reject_leftovers</code>.</p>
</div></details><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.CopyFormat.html" title="enum servers::postgres::copy_in::codec::CopyFormat">Copy<wbr>Format</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>A resolved COPY FROM STDIN format with its validated options.</dd></dl><h2 id="traits" class="section-header">Traits<a href="#traits" class="anchor">§</a></h2><dl class="item-table"><dt><a class="trait" href="trait.RecordParser.html" title="trait servers::postgres::copy_in::codec::RecordParser">Record<wbr>Parser</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>Incremental parser of one COPY FROM STDIN stream.</dd></dl><h2 id="types" class="section-header">Type Aliases<a href="#types" class="anchor">§</a></h2><dl class="item-table"><dt><a class="type" href="type.ParsedRow.html" title="type servers::postgres::copy_in::codec::ParsedRow">Parsed<wbr>Row</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>A parsed, insertable row: one gRPC value per targeted column, in COPY
field order. Every parser emits these directly, whatever mechanism it
used to produce them.</dd></dl></section></div></main></body></html>