pub enum ColumnOption<X: Extension = NoExt> {
Show 13 variants
Null {
meta: Meta,
},
NotNull {
meta: Meta,
},
Default {
expr: Box<Expr<X>>,
meta: Meta,
},
Generated {
generated: Box<GeneratedColumn<X>>,
meta: Meta,
},
Identity {
identity: Box<IdentityColumn<X>>,
meta: Meta,
},
PrimaryKey {
ascending: Option<bool>,
index_tablespace: Option<Box<Ident>>,
meta: Meta,
},
Unique {
nulls_not_distinct: Option<bool>,
index_tablespace: Option<Box<Ident>>,
meta: Meta,
},
AutoIncrement {
spelling: AutoIncrementSpelling,
meta: Meta,
},
Collate {
collation: Box<ObjectName>,
meta: Meta,
},
Check {
expr: Box<Expr<X>>,
no_inherit: bool,
meta: Meta,
},
References {
reference: Box<ForeignKeyRef>,
meta: Meta,
},
Bare {
meta: Meta,
},
Other {
ext: X,
meta: Meta,
},
}Expand description
The SQL column option forms represented by the AST.
Variants§
Null
An explicit NULL — the column is allowed to contain nulls.
NotNull
A NOT NULL constraint.
Default
A DEFAULT <expr> value clause.
Fields
Generated
A GENERATED ALWAYS AS (…) computed column.
Fields
generated: Box<GeneratedColumn<X>>The generated-column specification; see GeneratedColumn.
Identity
A GENERATED … AS IDENTITY identity column.
Fields
identity: Box<IdentityColumn<X>>The identity-column specification; see IdentityColumn.
PrimaryKey
An inline PRIMARY KEY constraint.
Fields
ascending: Option<bool>The SQLite ASC / DESC sort-order qualifier on an inline primary key
(id INT PRIMARY KEY DESC): Some(true) for ASC, Some(false) for
DESC, None when unwritten. Gated for acceptance by
ColumnDefinitionSyntax::inline_primary_key_ordering
— off elsewhere, where the trailing ASC/DESC is a clean parse error.
index_tablespace: Option<Box<Ident>>The USING INDEX TABLESPACE <name> index-parameter clause (PostgreSQL): the
tablespace of the implicit index backing this inline primary key (a int PRIMARY KEY USING INDEX TABLESPACE ts). None when unwritten. Boxed as the cold clause it
is (the box/inline budget — a wide table holds many ColumnDefs and this is rarely
written), matching Collate. Gated for acceptance by
ConstraintSyntax::index_constraint_parameters;
off elsewhere, where the USING keyword after PRIMARY KEY is a clean parse error.
Unique
An inline UNIQUE constraint.
Fields
nulls_not_distinct: Option<bool>The NULLS [NOT] DISTINCT null-treatment (PostgreSQL 15+): Some(false) for
NULLS NOT DISTINCT (nulls collide, so at most one null row), Some(true) for the
explicit NULLS DISTINCT default, None when unwritten. Gated for acceptance by
ConstraintSyntax::index_constraint_parameters;
off elsewhere, where the NULLS keyword after UNIQUE is a clean parse error.
index_tablespace: Option<Box<Ident>>The USING INDEX TABLESPACE <name> index-parameter clause (PostgreSQL), as on
PrimaryKey. None when unwritten. Boxed and
gated identically.
AutoIncrement
The MySQL AUTO_INCREMENT / SQLite AUTOINCREMENT column attribute: the
column’s value defaults to the next sequence number. The one canonical shape
carries a spelling tag so the two surface forms
round-trip. Each spelling gates on its own flag: the underscored AUTO_INCREMENT
under create_table_clause_syntax.table_options (MySQL) and the joined AUTOINCREMENT
under column_definition_syntax.joined_autoincrement_attribute (SQLite). Neither preset
admits the other’s spelling.
Fields
spelling: AutoIncrementSpellingExact source spelling retained for faithful rendering.
Collate
The column-definition COLLATE <collation> clause: the column’s default collating
sequence. One shape spans three dialects that each spell it in a column definition —
PostgreSQL (a text COLLATE "C" / COLLATE pg_catalog."default"), SQLite (a TEXT COLLATE NOCASE), and DuckDB (a VARCHAR COLLATE nocase) — interleaving freely with the
other constraints in PostgreSQL’s ColQualList order. The
name is a (possibly qualified, possibly quoted) ObjectName, matching the
expression-level COLLATE (ExpressionSyntax::collate);
SQLite/DuckDB write a single bare identifier (a one-part name), PostgreSQL a full
any_name. Distinct from that expression-level COLLATE, which qualifies an expression,
not a column. Gated for acceptance by
ColumnDefinitionSyntax::column_collation; off
elsewhere (ANSI/MySQL), where a column-level COLLATE is a clean parse error. The
collation name is boxed to keep this cold clause from widening the warm ColumnOption
enum (the box/inline budget): every other fat variant here boxes its payload, so
Collate matches them and the common unit constraints pay only a null pointer.
Check
An inline CHECK (<predicate>) constraint.
Fields
no_inherit: boolThe NO INHERIT marker (PostgreSQL/DuckDB): the check is not inherited by child
tables (a int CHECK (a > 0) NO INHERIT). At column level PostgreSQL bakes
opt_no_inherit directly into the CHECK production (unlike the table-level
TableConstraintDef marker, which rides the shared constraint-attribute slot), and
no column-level NOT VALID exists. Gated for acceptance by
ConstraintSyntax::constraint_no_inherit_not_valid;
off elsewhere, where NO INHERIT after a column CHECK is a clean parse error.
References
An inline REFERENCES <table> (<cols>) foreign-key constraint.
Fields
reference: Box<ForeignKeyRef>The foreign-key target table, columns, and options; see ForeignKeyRef.
Bare
A trailing bodyless CONSTRAINT <name> (SQLite): the ColumnConstraint::name is
written but no constraint element follows it before the column/table-element
terminator. Gated for acceptance by
ConstraintSyntax::bare_constraint_name; off
elsewhere, where a CONSTRAINT <name> with nothing following is a clean parse error.
Other
Dialect extension node supplied by the extension type.
Trait Implementations§
Source§impl<X: Clone + Extension> Clone for ColumnOption<X>
impl<X: Clone + Extension> Clone for ColumnOption<X>
Source§fn clone(&self) -> ColumnOption<X>
fn clone(&self) -> ColumnOption<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 ColumnOption<X>where
X: Deserialize<'de> + Extension,
impl<'de, X> Deserialize<'de> for ColumnOption<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 ColumnOption<X>
Source§impl<X: Extension + Render> Render for ColumnOption<X>
impl<X: Extension + Render> Render for ColumnOption<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 ColumnOption<X>
impl<X> Serialize for ColumnOption<X>
Source§impl<X: Extension> Spanned for ColumnOption<X>
impl<X: Extension> Spanned for ColumnOption<X>
impl<X: PartialEq + Extension> StructuralPartialEq for ColumnOption<X>
Auto Trait Implementations§
impl<X> Freeze for ColumnOption<X>where
X: Freeze,
impl<X> RefUnwindSafe for ColumnOption<X>where
X: RefUnwindSafe,
impl<X> Send for ColumnOption<X>where
X: Send,
impl<X> Sync for ColumnOption<X>where
X: Sync,
impl<X> Unpin for ColumnOption<X>where
X: Unpin,
impl<X> UnsafeUnpin for ColumnOption<X>where
X: UnsafeUnpin,
impl<X> UnwindSafe for ColumnOption<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.