Skip to main content

CreateTableBody

Enum CreateTableBody 

Source
pub enum CreateTableBody<X: Extension = NoExt> {
    Definition {
        elements: ThinVec<TableElement<X>>,
        meta: Meta,
    },
    AsQuery {
        columns: ThinVec<Ident>,
        query: Box<Query<X>>,
        with_data: Option<bool>,
        meta: Meta,
    },
    AsExecute {
        columns: ThinVec<Ident>,
        execute: Box<ExecuteStatement<X>>,
        with_data: Option<bool>,
        meta: Meta,
    },
    PartitionOf {
        parent: ObjectName,
        elements: ThinVec<TableElement<X>>,
        bound: Box<PartitionBound<X>>,
        meta: Meta,
    },
    OfType {
        type_name: ObjectName,
        elements: ThinVec<TableElement<X>>,
        meta: Meta,
    },
    LikeSource {
        source: ObjectName,
        parenthesized: bool,
        meta: Meta,
    },
}
Expand description

The CREATE TABLE body: a (elements) definition, an AS <query>, a PARTITION OF declarative-partitioning child, or an OF <type> typed table.

Variants§

§

Definition

A parenthesized (col …, constraint …) column/constraint definition list.

Fields

§elements: ThinVec<TableElement<X>>

elements in source order.

§meta: Meta

Source location and node identity.

§

AsQuery

A CREATE TABLE … AS <query> — populate the table from a query.

Fields

§columns: ThinVec<Ident>

Columns in source order.

§query: Box<Query<X>>

Query governed by this node.

§with_data: Option<bool>

Whether the with data form was present in the source.

§meta: Meta

Source location and node identity.

§

AsExecute

AS EXECUTE <prepared> [(<arg>, ...)] [WITH [NO] DATA] — a CTAS whose source rows come from running a prepared statement rather than an inline query (PostgreSQL’s CreateTableAsStmt over an ExecuteStmt, CREATE TABLE t AS EXECUTE plan(1, 2)). The optional columns rename the result columns (empty when the (...) list is absent) exactly as on AsQuery, and the same trailing WITH [NO] DATA populate flag rides here. The prepared-statement source is a reused ExecuteStatement (name + positional args), boxed to keep this variant within the enum’s size budget. Gated for acceptance by CreateTableClauseSyntax::create_table_as_execute; off elsewhere, where EXECUTE after AS is left unconsumed and surfaces as a clean parse error (the inline-query CTAS path takes over and rejects the EXECUTE keyword).

Fields

§columns: ThinVec<Ident>

Columns in source order.

§execute: Box<ExecuteStatement<X>>

The prepared statement executed to populate the table; see ExecuteStatement.

§with_data: Option<bool>

Whether the with data form was present in the source.

§meta: Meta

Source location and node identity.

§

PartitionOf

PARTITION OF <parent> [(<augmentation>, ...)] <bound> — a declarative-partitioning child, whose column shape is inherited from parent (PostgreSQL). The optional parenthesized augmentation list carries per-column overrides (a bare ColId with a [WITH OPTIONS] constraint list — no type, so each ColumnDef leaves data_type None) and table constraints; it reuses TableElement and stays empty when the (...) is absent (PostgreSQL rejects an empty ()). The bound is the mandatory FOR VALUES … / DEFAULT partition-bound spec. Gated for acceptance by CreateTableClauseSyntax::declarative_partitioning; off elsewhere, PARTITION after the table name surfaces as a clean parse error.

Fields

§parent: ObjectName

The parent partitioned table (PARTITION OF <parent>).

§elements: ThinVec<TableElement<X>>

elements in source order.

§bound: Box<PartitionBound<X>>

The partition bound (FOR VALUES … / DEFAULT); see PartitionBound.

§meta: Meta

Source location and node identity.

§

OfType

OF <type_name> [(<augmentation>, ...)] — a typed table whose column shape is drawn from a composite type (PostgreSQL). Like PartitionOf the optional parenthesized list augments rather than declares: each element is a bare ColId with an optional WITH OPTIONS noise phrase and a constraint list (no type — the column’s type comes from type_name, so each ColumnDef leaves data_type None) or a table constraint. It reuses TableElement and stays empty when the (...) is absent (PostgreSQL rejects an empty ()). Unlike the (elements) Definition body, the OF form takes no INHERITS clause (CREATE TABLE t OF ty INHERITS (p) is a raw-parse error), so CreateTable::inherits is always empty for it. Gated for acceptance by CreateTableClauseSyntax::typed_tables; off elsewhere, OF after the table name surfaces as a clean parse error.

Fields

§type_name: ObjectName

The composite type the table is defined OF (CREATE TABLE t OF <type>).

§elements: ThinVec<TableElement<X>>

elements in source order.

§meta: Meta

Source location and node identity.

§

LikeSource

LIKE <source> / (LIKE <source>) — MySQL’s statement-level table-clone body, which copies the whole definition of an existing table (CREATE TABLE t LIKE src). Unlike PostgreSQL’s TableElement::Like copy element (which sits inside a (elements) Definition list, carries {INCLUDING | EXCLUDING} <feature> options, and can co-occur with other elements — gated by CreateTableClauseSyntax::like_source_table), this is a whole-statement production that replaces the entire body: exactly one bare source name, no feature-copy options, no co-element, no trailing table options — MySQL rejects LIKE src ENGINE=…, (LIKE src, x INT), and (LIKE src INCLUDING ALL) all as ER_PARSE_ERROR. MySQL spells it two ways, differing only by optional parentheses (parenthesized records which so the source form round-trips); both admit a qualified source name and compose freely with IF NOT EXISTS and TEMPORARY. Gated for acceptance by CreateTableClauseSyntax::statement_level_table_like; off elsewhere, LIKE after the table name (or as the first token inside () is left unconsumed and surfaces as a clean parse error.

Fields

§source: ObjectName

Input source for this syntax.

§parenthesized: bool

Whether the source was written parenthesized ((LIKE src)) rather than bare (LIKE src). Both are the same MySQL production; this preserves the spelling.

§meta: Meta

Source location and node identity.

Trait Implementations§

Source§

impl<X: Clone + Extension> Clone for CreateTableBody<X>

Source§

fn clone(&self) -> CreateTableBody<X>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<X: Debug + Extension> Debug for CreateTableBody<X>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de, X> Deserialize<'de> for CreateTableBody<X>
where X: Deserialize<'de> + Extension,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<X: Eq + Extension> Eq for CreateTableBody<X>

Source§

impl<X: Hash + Extension> Hash for CreateTableBody<X>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<X: PartialEq + Extension> PartialEq for CreateTableBody<X>

Source§

fn eq(&self, other: &CreateTableBody<X>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<X: Extension + Render> Render for CreateTableBody<X>

Source§

fn render(&self, ctx: &RenderCtx<'_>, f: &mut Formatter<'_>) -> Result

Return the render for this value.
Source§

fn operand_binding_power(&self) -> Option<BindingPower>

The binding power this node contributes when it appears as an operand, or None (the default) for a self-delimiting node — an atom, call, or constructor — that never needs parentheses. Read more
Source§

impl<X> Serialize for CreateTableBody<X>
where X: Serialize + Extension,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<X: Extension> Spanned for CreateTableBody<X>

Source§

fn span(&self) -> Span

Return the span for this value.
Source§

impl<X: PartialEq + Extension> StructuralPartialEq for CreateTableBody<X>

Auto Trait Implementations§

§

impl<X> Freeze for CreateTableBody<X>

§

impl<X> RefUnwindSafe for CreateTableBody<X>
where X: RefUnwindSafe,

§

impl<X> Send for CreateTableBody<X>
where X: Send,

§

impl<X> Sync for CreateTableBody<X>
where X: Sync,

§

impl<X> Unpin for CreateTableBody<X>
where X: Unpin,

§

impl<X> UnsafeUnpin for CreateTableBody<X>

§

impl<X> UnwindSafe for CreateTableBody<X>
where X: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynAstExt for T
where T: Extension + Render + 'static,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Erase to &dyn Any for downcasting a node back to its concrete type.
Source§

fn dyn_clone(&self) -> Box<dyn DynAstExt>

Clone into a fresh box — the object-safe stand-in for Clone (whose Self-returning signature cannot go through a vtable).
Source§

fn dyn_eq(&self, other: &dyn DynAstExt) -> bool

Structural equality against another erased node — the object-safe stand-in for 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.
Source§

fn dyn_hash(&self, state: &mut dyn Hasher)

Feed this node’s hash into an erased hasher — the object-safe stand-in for Hash::hash (whose generic H: Hasher cannot go through a vtable).
Source§

impl<T> Extension for T
where T: Clone + Debug + Eq + Hash + Spanned,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> RenderExt for T
where T: Render,

Source§

fn displayed<'a>(&'a self, ctx: &'a RenderCtx<'a>) -> Displayed<'a, T>

Pair this node with an explicit canonical RenderCtx so format!, to_string, and {} render it. This is the canonical path: the ctx’s resolver and source must match the node’s parse.
Source§

fn debug_sql<'a>(&'a self, resolver: &'a dyn Resolver) -> DebugSql<'a, Self>
where Self: Sized,

Render this node for debugging against an explicitly-supplied resolver (the debug-SQL mitigation), returning a Display adapter. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.