pub enum CopyOptionValue {
Word {
word: Ident,
meta: Meta,
},
String {
value: Literal,
meta: Meta,
},
Number {
value: Literal,
meta: Meta,
},
Star {
meta: Meta,
},
List {
values: ThinVec<CopyOptionValue>,
meta: Meta,
},
Force {
kind: ForceKind,
columns: ThinVec<Ident>,
meta: Meta,
},
OptionList {
options: ThinVec<CopyOption>,
meta: Meta,
},
}Expand description
The argument shapes a CopyOption can carry — the extensible axis of the COPY
option machinery.
Mirrors PostgreSQL’s copy_generic_opt_arg alternatives (opt_boolean_or_string,
NumericOnly, '*', and '(' copy_generic_opt_arg_list ')'), which pg_query
accepts under the plain copy gate, plus the legacy Force
compound. DuckDB’s and the Snowflake-adjacent parity target’s format/option values
are a subset of these same shapes, so no widening feature flag is needed. This
enum is the pre-staged extension point for the COPY INTO sibling: a keyed nested
option list (Snowflake FILE_FORMAT = (TYPE = CSV …)) becomes an additive
variant here (a ThinVec<CopyOption> payload), riding the same
CopyOption/CopyStatement machinery rather than reshaping it.
Variants§
Word
A bareword argument kept as its source word (FORMAT csv, HEADER true,
DuckDB FORMAT PARQUET). PostgreSQL opt_boolean_or_string.
String
A string argument (DELIMITER ',', NULL '', DuckDB COMPRESSION 'zstd').
Number
A numeric argument (HEADER 1, DuckDB ROW_GROUP_SIZE 100000), including a
sign-folded negative (-1) or decimal (1.5). PostgreSQL NumericOnly; the
sign is folded into the literal’s span so it round-trips whole.
Star
The bare * argument of a generic parenthesized option (FORCE_QUOTE *).
PostgreSQL '*'; distinct from the legacy Force all-columns
form, which spells * as an empty column list.
List
A parenthesized argument list (FORCE_QUOTE (a, b), DuckDB PARTITION_BY (y, m)). PostgreSQL '(' copy_generic_opt_arg_list ')'. The parser only ever
emits Word/String/Number
list items (PostgreSQL’s list items are opt_boolean_or_string; DuckDB adds
numerics); the recursive type keeps one axis rather than a parallel item enum.
Fields
values: ThinVec<CopyOptionValue>Values in source order.
Force
The {QUOTE | NULL | NOT NULL} {<column-list> | *} payload of a legacy
FORCE option (PostgreSQL copy_opt_item), whose compound keyword the
generic <name> [<value>] shape cannot carry: the name
is the leading FORCE word and this value holds the sub-keyword (which
kind distinguishes) and its target. An empty
columns list is the * (all-columns) form (PostgreSQL
A_Star) — unambiguous because PostgreSQL’s columnList is never empty.
Fields
OptionList
A keyed nested option list — the space-separated <key> = <value> pairs
inside a Snowflake FILE_FORMAT = (TYPE = CSV FIELD_DELIMITER = ',') (or a
FORMAT_NAME = '...') argument. Each element is a CopyOption, so the
nested option vocabulary rides the same machinery as the outer list rather
than a parallel node — the additive extension point ADR-0011 pre-staged on
this enum. Distinct from List, whose elements are bare
comma-separated values (FORCE_QUOTE (a, b)): an OptionList element is a
key = value pair and the elements are space-separated. Only
CopyIntoStatement emits this (via its = (...) option grammar);
PostgreSQL/DuckDB COPY never does.
Fields
options: ThinVec<CopyOption>Options supplied in source order.
Trait Implementations§
Source§impl Clone for CopyOptionValue
impl Clone for CopyOptionValue
Source§fn clone(&self) -> CopyOptionValue
fn clone(&self) -> CopyOptionValue
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CopyOptionValue
impl Debug for CopyOptionValue
Source§impl<'de> Deserialize<'de> for CopyOptionValue
impl<'de> Deserialize<'de> for CopyOptionValue
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for CopyOptionValue
Source§impl Hash for CopyOptionValue
impl Hash for CopyOptionValue
Source§impl PartialEq for CopyOptionValue
impl PartialEq for CopyOptionValue
Source§impl Render for CopyOptionValue
impl Render for CopyOptionValue
Source§fn render(&self, ctx: &RenderCtx<'_>, f: &mut Formatter<'_>) -> Result
fn render(&self, ctx: &RenderCtx<'_>, f: &mut Formatter<'_>) -> Result
Source§fn operand_binding_power(&self) -> Option<BindingPower>
fn operand_binding_power(&self) -> Option<BindingPower>
None (the default) for a self-delimiting node — an atom, call, or
constructor — that never needs parentheses. Read moreSource§impl Serialize for CopyOptionValue
impl Serialize for CopyOptionValue
impl StructuralPartialEq for CopyOptionValue
Auto Trait Implementations§
impl Freeze for CopyOptionValue
impl RefUnwindSafe for CopyOptionValue
impl Send for CopyOptionValue
impl Sync for CopyOptionValue
impl Unpin for CopyOptionValue
impl UnsafeUnpin for CopyOptionValue
impl UnwindSafe for CopyOptionValue
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> DynAstExt for T
impl<T> DynAstExt for T
Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&dyn Any for downcasting a node back to its concrete type.Source§fn dyn_clone(&self) -> Box<dyn DynAstExt>
fn dyn_clone(&self) -> Box<dyn DynAstExt>
Clone (whose
Self-returning signature cannot go through a vtable).Source§fn dyn_eq(&self, other: &dyn DynAstExt) -> bool
fn dyn_eq(&self, other: &dyn DynAstExt) -> bool
PartialEq (whose &Self argument cannot go through a vtable). Equal
iff other holds the same concrete type and that type deems the values
equal; differently-typed nodes are never equal.