pub enum TableConstraint {
Unique {
name: Option<Ident>,
index_name: Option<Ident>,
index_type_display: KeyOrIndexDisplay,
index_type: Option<IndexType>,
columns: Vec<Ident>,
index_options: Vec<IndexOption>,
characteristics: Option<ConstraintCharacteristics>,
},
PrimaryKey {
name: Option<Ident>,
index_name: Option<Ident>,
index_type: Option<IndexType>,
columns: Vec<Ident>,
index_options: Vec<IndexOption>,
characteristics: Option<ConstraintCharacteristics>,
},
ForeignKey {
name: Option<Ident>,
columns: Vec<Ident>,
foreign_table: ObjectName,
referred_columns: Vec<Ident>,
on_delete: Option<ReferentialAction>,
on_update: Option<ReferentialAction>,
characteristics: Option<ConstraintCharacteristics>,
},
Check {
name: Option<Ident>,
expr: Box<Expr>,
},
Index {
display_as_key: bool,
name: Option<Ident>,
index_type: Option<IndexType>,
columns: Vec<Ident>,
},
FulltextOrSpatial {
fulltext: bool,
index_type_display: KeyOrIndexDisplay,
opt_index_name: Option<Ident>,
columns: Vec<Ident>,
},
}Expand description
A table-level constraint, specified in a CREATE TABLE or an
ALTER TABLE ADD <constraint> statement.
Variants§
Unique
MySQL definition for UNIQUE constraints statements:\
[CONSTRAINT [<name>]] UNIQUE <index_type_display> [<index_name>] [index_type] (<columns>) <index_options>
where:
- index_type is
USING {BTREE | HASH} - index_options is
{index_type | COMMENT 'string' | ... %currently unsupported stmts% } ... - index_type_display is
[INDEX | KEY]
Fields
index_type_display: KeyOrIndexDisplayWhether the type is followed by the keyword KEY, INDEX, or no keyword at all.
index_type: Option<IndexType>Optional USING of index type statement before columns.
index_options: Vec<IndexOption>characteristics: Option<ConstraintCharacteristics>PrimaryKey
MySQL definition for PRIMARY KEY constraints statements:\
[CONSTRAINT [<name>]] PRIMARY KEY [index_name] [index_type] (<columns>) <index_options>
Actually the specification have no [index_name] but the next query will complete successfully:
CREATE TABLE unspec_table (
xid INT NOT NULL,
CONSTRAINT p_name PRIMARY KEY index_name USING BTREE (xid)
);where:
- index_type is
USING {BTREE | HASH} - index_options is
{index_type | COMMENT 'string' | ... %currently unsupported stmts% } ...
Fields
index_type: Option<IndexType>Optional USING of index type statement before columns.
index_options: Vec<IndexOption>characteristics: Option<ConstraintCharacteristics>ForeignKey
A referential integrity constraint ([ CONSTRAINT <name> ] FOREIGN KEY (<columns>) REFERENCES <foreign_table> (<referred_columns>) { [ON DELETE <referential_action>] [ON UPDATE <referential_action>] | [ON UPDATE <referential_action>] [ON DELETE <referential_action>] }).
Fields
foreign_table: ObjectNameon_delete: Option<ReferentialAction>on_update: Option<ReferentialAction>characteristics: Option<ConstraintCharacteristics>Check
[ CONSTRAINT <name> ] CHECK (<expr>)
Index
MySQLs index definition for index creation. Not present on ANSI so, for now, the usage is restricted to MySQL, as no other dialects that support this syntax were found.
{INDEX | KEY} [index_name] [index_type] (key_part,...) [index_option]...
Fields
display_as_key: boolWhether this index starts with KEY (true) or INDEX (false), to maintain the same syntax.
index_type: Option<IndexType>Optional index type.
FulltextOrSpatial
MySQLs fulltext definition. Since the SPATIAL definition is exactly the same,
and MySQL displays both the same way, it is part of this definition as well.
Supported syntax:
{FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,...)
key_part: col_nameFields
index_type_display: KeyOrIndexDisplayWhether the type is followed by the keyword KEY, INDEX, or no keyword at all.
Trait Implementations§
Source§impl Clone for TableConstraint
impl Clone for TableConstraint
Source§fn clone(&self) -> TableConstraint
fn clone(&self) -> TableConstraint
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more