pub struct TableAlterStatement { /* private fields */ }Expand description
Alter a table
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Font::Table)
.add_column(ColumnDef::new("new_col").integer().not_null().default(100))
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
r#"ALTER TABLE `font` ADD COLUMN `new_col` int NOT NULL DEFAULT 100"#
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
r#"ALTER TABLE "font" ADD COLUMN "new_col" integer NOT NULL DEFAULT 100"#
);
assert_eq!(
table.to_string(SqliteQueryBuilder),
r#"ALTER TABLE "font" ADD COLUMN "new_col" integer NOT NULL DEFAULT 100"#,
);Implementationsยง
Sourceยงimpl TableAlterStatement
impl TableAlterStatement
Sourcepub fn table<T>(&mut self, table: T) -> &mut Selfwhere
T: IntoTableRef,
pub fn table<T>(&mut self, table: T) -> &mut Selfwhere
T: IntoTableRef,
Set table name
Sourcepub fn add_column<C: IntoColumnDef>(&mut self, column_def: C) -> &mut Self
pub fn add_column<C: IntoColumnDef>(&mut self, column_def: C) -> &mut Self
Add a column to an existing table
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Font::Table)
.add_column(ColumnDef::new("new_col").integer().not_null().default(100))
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
r#"ALTER TABLE `font` ADD COLUMN `new_col` int NOT NULL DEFAULT 100"#
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
r#"ALTER TABLE "font" ADD COLUMN "new_col" integer NOT NULL DEFAULT 100"#
);
assert_eq!(
table.to_string(SqliteQueryBuilder),
r#"ALTER TABLE "font" ADD COLUMN "new_col" integer NOT NULL DEFAULT 100"#,
);Sourcepub fn add_column_if_not_exists<C: IntoColumnDef>(
&mut self,
column_def: C,
) -> &mut Self
pub fn add_column_if_not_exists<C: IntoColumnDef>( &mut self, column_def: C, ) -> &mut Self
Try add a column to an existing table if it does not exists
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Font::Table)
.add_column_if_not_exists(ColumnDef::new("new_col").integer().not_null().default(100))
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
r#"ALTER TABLE `font` ADD COLUMN IF NOT EXISTS `new_col` int NOT NULL DEFAULT 100"#
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
r#"ALTER TABLE "font" ADD COLUMN IF NOT EXISTS "new_col" integer NOT NULL DEFAULT 100"#
);
assert_eq!(
table.to_string(SqliteQueryBuilder),
r#"ALTER TABLE "font" ADD COLUMN "new_col" integer NOT NULL DEFAULT 100"#,
);Sourcepub fn modify_column<C: IntoColumnDef>(&mut self, column_def: C) -> &mut Self
pub fn modify_column<C: IntoColumnDef>(&mut self, column_def: C) -> &mut Self
Modify a column in an existing table
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Font::Table)
.modify_column(ColumnDef::new("new_col").big_integer().default(999))
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
r#"ALTER TABLE `font` MODIFY COLUMN `new_col` bigint DEFAULT 999"#
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
[
r#"ALTER TABLE "font""#,
r#"ALTER COLUMN "new_col" TYPE bigint,"#,
r#"ALTER COLUMN "new_col" SET DEFAULT 999"#,
]
.join(" ")
);
// Sqlite not support modifying table columnSourcepub fn rename_column<T, R>(&mut self, from_name: T, to_name: R) -> &mut Self
pub fn rename_column<T, R>(&mut self, from_name: T, to_name: R) -> &mut Self
Rename a column in an existing table
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Font::Table)
.rename_column("new_col", "new_column")
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
r#"ALTER TABLE `font` RENAME COLUMN `new_col` TO `new_column`"#
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
r#"ALTER TABLE "font" RENAME COLUMN "new_col" TO "new_column""#
);
assert_eq!(
table.to_string(SqliteQueryBuilder),
r#"ALTER TABLE "font" RENAME COLUMN "new_col" TO "new_column""#
);Sourcepub fn drop_column<T>(&mut self, col_name: T) -> &mut Selfwhere
T: IntoIden,
pub fn drop_column<T>(&mut self, col_name: T) -> &mut Selfwhere
T: IntoIden,
Drop a column from an existing table
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Font::Table)
.drop_column("new_column")
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
r#"ALTER TABLE `font` DROP COLUMN `new_column`"#
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
r#"ALTER TABLE "font" DROP COLUMN "new_column""#
);
assert_eq!(
table.to_string(SqliteQueryBuilder),
r#"ALTER TABLE "font" DROP COLUMN "new_column""#
);Sourcepub fn drop_column_if_exists<T>(&mut self, col_name: T) -> &mut Selfwhere
T: IntoIden,
pub fn drop_column_if_exists<T>(&mut self, col_name: T) -> &mut Selfwhere
T: IntoIden,
Drop a column from an existing table if it exists
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Font::Table)
.drop_column_if_exists("new_column")
.to_owned();
assert_eq!(
table.to_string(PostgresQueryBuilder),
r#"ALTER TABLE "font" DROP COLUMN IF EXISTS "new_column""#
);
// MySQL and Sqlite do not support DROP COLUMN IF EXISTSSourcepub fn add_foreign_key(&mut self, foreign_key: &TableForeignKey) -> &mut Self
pub fn add_foreign_key(&mut self, foreign_key: &TableForeignKey) -> &mut Self
Add a foreign key to existing table
ยงExamples
use sea_query::{tests_cfg::*, *};
let foreign_key_char = TableForeignKey::new()
.name("FK_character_glyph")
.from_tbl(Char::Table)
.from_col(Char::FontId)
.from_col(Char::Id)
.to_tbl(Glyph::Table)
.to_col(Char::FontId)
.to_col(Char::Id)
.on_delete(ForeignKeyAction::Cascade)
.on_update(ForeignKeyAction::Cascade)
.to_owned();
let foreign_key_font = TableForeignKey::new()
.name("FK_character_font")
.from_tbl(Char::Table)
.from_col(Char::FontId)
.to_tbl(Font::Table)
.to_col(Font::Id)
.on_delete(ForeignKeyAction::Cascade)
.on_update(ForeignKeyAction::Cascade)
.to_owned();
let table = Table::alter()
.table(Character::Table)
.add_foreign_key(&foreign_key_char)
.add_foreign_key(&foreign_key_font)
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
[
r#"ALTER TABLE `character`"#,
r#"ADD CONSTRAINT `FK_character_glyph`"#,
r#"FOREIGN KEY (`font_id`, `id`) REFERENCES `glyph` (`font_id`, `id`)"#,
r#"ON DELETE CASCADE ON UPDATE CASCADE,"#,
r#"ADD CONSTRAINT `FK_character_font`"#,
r#"FOREIGN KEY (`font_id`) REFERENCES `font` (`id`)"#,
r#"ON DELETE CASCADE ON UPDATE CASCADE"#,
]
.join(" ")
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
[
r#"ALTER TABLE "character""#,
r#"ADD CONSTRAINT "FK_character_glyph""#,
r#"FOREIGN KEY ("font_id", "id") REFERENCES "glyph" ("font_id", "id")"#,
r#"ON DELETE CASCADE ON UPDATE CASCADE,"#,
r#"ADD CONSTRAINT "FK_character_font""#,
r#"FOREIGN KEY ("font_id") REFERENCES "font" ("id")"#,
r#"ON DELETE CASCADE ON UPDATE CASCADE"#,
]
.join(" ")
);
// Sqlite not support modifying table columnSourcepub fn drop_foreign_key<T>(&mut self, name: T) -> &mut Selfwhere
T: IntoIden,
pub fn drop_foreign_key<T>(&mut self, name: T) -> &mut Selfwhere
T: IntoIden,
Drop a foreign key from existing table
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Character::Table)
.drop_foreign_key("FK_character_glyph")
.drop_foreign_key("FK_character_font")
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
[
r#"ALTER TABLE `character`"#,
r#"DROP FOREIGN KEY `FK_character_glyph`,"#,
r#"DROP FOREIGN KEY `FK_character_font`"#,
]
.join(" ")
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
[
r#"ALTER TABLE "character""#,
r#"DROP CONSTRAINT "FK_character_glyph","#,
r#"DROP CONSTRAINT "FK_character_font""#,
]
.join(" ")
);
// Sqlite not support modifying table columnSourcepub fn drop_constraint<T>(&mut self, name: T) -> &mut Selfwhere
T: IntoIden,
pub fn drop_constraint<T>(&mut self, name: T) -> &mut Selfwhere
T: IntoIden,
Drop a named constraint from an existing table.
On PostgreSQL and MySQL this generates DROP CONSTRAINT "name".
Note: On PostgreSQL this is the correct way to drop a unique constraint that was
created via ADD COLUMN โฆ UNIQUE (which creates a named constraint, not a standalone
index). On MySQL, DROP CONSTRAINT is only valid for check constraints (MySQL
8.0.19+); use crate::Index::drop to remove a unique index on MySQL.
ยงExamples
use sea_query::{tests_cfg::*, *};
let table = Table::alter()
.table(Font::Table)
.drop_constraint("font_name_key")
.to_owned();
assert_eq!(
table.to_string(MysqlQueryBuilder),
r#"ALTER TABLE `font` DROP CONSTRAINT `font_name_key`"#
);
assert_eq!(
table.to_string(PostgresQueryBuilder),
r#"ALTER TABLE "font" DROP CONSTRAINT "font_name_key""#
);
// Sqlite does not support dropping constraintspub fn take(&mut self) -> Self
Sourceยงimpl TableAlterStatement
impl TableAlterStatement
pub fn build<T: SchemaBuilder>(&self, schema_builder: T) -> String
pub fn to_string<T: SchemaBuilder>(&self, schema_builder: T) -> String
Trait Implementationsยง
Sourceยงimpl Clone for TableAlterStatement
impl Clone for TableAlterStatement
Sourceยงfn clone(&self) -> TableAlterStatement
fn clone(&self) -> TableAlterStatement
1.0.0 (const: unstable) ยท Sourceยงfn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more