pub struct PivotColumn<X: Extension = NoExt> {
pub expr: Expr<X>,
pub values: ThinVec<PivotExpr<X>>,
pub enum_source: Option<Ident>,
pub value_source: Option<Box<PivotValueSource<X>>>,
pub meta: Meta,
}Expand description
One pivot column and its optional IN source — a statement ON entry (year,
year IN (2000, 2010), year IN (SELECT …)) or a table-factor FOR head
(FOR <col> IN (<values>), FOR <col> IN <enum>,
FOR <col> IN (ANY [ORDER BY …]), FOR <col> IN (<subquery>)).
The value source is spread across three mutually-exclusive fields rather than one
enum: values (the explicit list) and
enum_source are DuckDB’s native shapes and stay untouched,
while value_source carries the standard ANY/subquery forms
added for the Snowflake/BigQuery/Oracle table factor. This deliberately deviates from
sqlparser-rs’s single PivotValueSource { List, Any, Subquery } enum: that shape
lives at the whole-pivot level and cannot express DuckDB’s per-column FOR y IN (…) m IN (…) heads or its IN <enum> form, so this node keeps the source per column and
folds the two new forms into an Option beside the existing DuckDB fields (see
PivotValueSource). Exactly one of the three is populated for any one column.
Fields§
§expr: Expr<X>The pivoted column or expression (a grouped (a, b) reads as a row
expression). A statement entry whose IN source is a subquery keeps the whole
Expr::InSubquery here — the engine admits it (probed on
1.5.4) and the subquery is a value source, not a value list.
values: ThinVec<PivotExpr<X>>The explicit IN (<values>) list; empty for a statement ON column whose
values DuckDB auto-detects at bind time (and whenever
enum_source or value_source
carries the IN instead).
enum_source: Option<Ident>The table factor’s IN <enum> form (FOR m IN month_enum): the values come
from a named ENUM type rather than a written list. A single unqualified name —
the engine rejects a qualified one (probed on 1.5.4) — and mutually exclusive
with values.
value_source: Option<Box<PivotValueSource<X>>>The standard PIVOT’s non-list value sources — IN (ANY [ORDER BY …]) and
IN (<subquery>) (Snowflake/BigQuery/Oracle), gated on
TableFactorSyntax::pivot_value_sources.
None for the explicit-list, enum, and auto-detected DuckDB forms; mutually
exclusive with values/enum_source.
Boxed to keep the common (list) column small while the source is wide.
meta: MetaSource location and node identity.
Trait Implementations§
Source§impl<X: Clone + Extension> Clone for PivotColumn<X>
impl<X: Clone + Extension> Clone for PivotColumn<X>
Source§fn clone(&self) -> PivotColumn<X>
fn clone(&self) -> PivotColumn<X>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'de, X> Deserialize<'de> for PivotColumn<X>where
X: Deserialize<'de> + Extension,
impl<'de, X> Deserialize<'de> for PivotColumn<X>where
X: Deserialize<'de> + Extension,
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<X: Eq + Extension> Eq for PivotColumn<X>
Source§impl<X: Extension + Render> Render for PivotColumn<X>
impl<X: Extension + Render> Render for PivotColumn<X>
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<X> Serialize for PivotColumn<X>
impl<X> Serialize for PivotColumn<X>
Source§impl<X: Extension> Spanned for PivotColumn<X>
impl<X: Extension> Spanned for PivotColumn<X>
impl<X: PartialEq + Extension> StructuralPartialEq for PivotColumn<X>
Auto Trait Implementations§
impl<X> Freeze for PivotColumn<X>where
X: Freeze,
impl<X> RefUnwindSafe for PivotColumn<X>where
X: RefUnwindSafe,
impl<X> Send for PivotColumn<X>where
X: Send,
impl<X> Sync for PivotColumn<X>where
X: Sync,
impl<X> Unpin for PivotColumn<X>where
X: Unpin,
impl<X> UnsafeUnpin for PivotColumn<X>where
X: UnsafeUnpin,
impl<X> UnwindSafe for PivotColumn<X>where
X: UnwindSafe,
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.