Struct TableAlterStatement
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(MsSqlQueryBuilder),
r#"ALTER TABLE [font] ADD [new_col] int NOT NULL DEFAULT 100"#
);
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§
§impl TableAlterStatement
impl TableAlterStatement
pub fn new() -> Self
pub fn new() -> Self
Construct alter table statement
pub 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
pub 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(MsSqlQueryBuilder),
r#"ALTER TABLE [font] ADD [new_col] int NOT NULL DEFAULT 100"#
);
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"#,
);pub 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(MsSqlQueryBuilder),
r#"ALTER TABLE [font] ADD [new_col] int NOT NULL DEFAULT 100"#
);
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"#,
);pub 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(MsSqlQueryBuilder),
r#"ALTER TABLE [font] ALTER COLUMN [new_col] bigint ALTER TABLE [font] ADD CONSTRAINT [DF_new_col] DEFAULT 999 FOR [new_col]"#
);
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 column
assert_eq!(
Table::alter()
.table("glyph_t6")
.modify_column(
ColumnDef::new("new_col")
.enumeration(
"ENUM",
["A", "B", "C"]
)
.not_null()
.default("A")
.unique_key(),
)
.to_string(MsSqlQueryBuilder),
[
"ALTER TABLE [glyph_t6] ALTER COLUMN [new_col] nvarchar(255) NOT NULL",
"ALTER TABLE [glyph_t6] ADD CONSTRAINT [DF_new_col] DEFAULT 'A' FOR [new_col]",
"ALTER TABLE [glyph_t6] ADD CONSTRAINT [UQ_new_col] UNIQUE ([new_col])",
"ALTER TABLE [glyph_t6] ADD CONSTRAINT [ENUM_new_col] CHECK ([new_col] IN ('A', 'B', 'C'))",
]
.join(" ")
);pub 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();
// For MSSQL, please use `sp_rename` to rename a table
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""#
);pub 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(MsSqlQueryBuilder),
r#"ALTER TABLE [font] DROP COLUMN [new_column]"#
);
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""#
);pub 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 EXISTSpub 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(MsSqlQueryBuilder),
[
r#"ALTER TABLE [character]"#,
r#"ADD CONSTRAINT [FK_character_glyph] FOREIGN KEY ([font_id], [id]) REFERENCES [glyph] ([font_id], [id])"#,
r#"ON DELETE CASCADE ON UPDATE CASCADE,"#,
r#"CONSTRAINT [FK_character_font] FOREIGN KEY ([font_id]) REFERENCES [font] ([id])"#,
r#"ON DELETE CASCADE ON UPDATE CASCADE"#,
]
.join(" ")
);
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 columnpub 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(MsSqlQueryBuilder),
[
r#"ALTER TABLE [character]"#,
r#"DROP CONSTRAINT [FK_character_glyph], [FK_character_font]"#,
]
.join(" ")
);
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 columnpub fn take(&mut self) -> Self
§impl TableAlterStatement
impl TableAlterStatement
pub fn build<T>(&self, schema_builder: T) -> Stringwhere
T: SchemaBuilder,
pub fn build<T>(&self, schema_builder: T) -> Stringwhere
T: SchemaBuilder,
pub fn to_string<T>(&self, schema_builder: T) -> Stringwhere
T: SchemaBuilder,
pub fn to_string<T>(&self, schema_builder: T) -> Stringwhere
T: SchemaBuilder,
Trait Implementations§
§impl Clone for TableAlterStatement
impl Clone for TableAlterStatement
§fn clone(&self) -> TableAlterStatement
fn clone(&self) -> TableAlterStatement
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read more§impl Debug for TableAlterStatement
impl Debug for TableAlterStatement
§impl Default for TableAlterStatement
impl Default for TableAlterStatement
§fn default() -> TableAlterStatement
fn default() -> TableAlterStatement
Returns the “default value” for a type. Read more
§impl SchemaStatementBuilder for TableAlterStatement
impl SchemaStatementBuilder for TableAlterStatement
§fn build<T>(&self, schema_builder: T) -> Stringwhere
T: SchemaBuilder,
fn build<T>(&self, schema_builder: T) -> Stringwhere
T: SchemaBuilder,
Build corresponding SQL statement for certain database backend and return SQL string
§fn to_string<T>(&self, schema_builder: T) -> Stringwhere
T: SchemaBuilder,
fn to_string<T>(&self, schema_builder: T) -> Stringwhere
T: SchemaBuilder,
Build corresponding SQL statement for certain database backend and return SQL string
Auto Trait Implementations§
impl Freeze for TableAlterStatement
impl RefUnwindSafe for TableAlterStatement
impl !Send for TableAlterStatement
impl !Sync for TableAlterStatement
impl Unpin for TableAlterStatement
impl UnwindSafe for TableAlterStatement
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
Mutably borrows from an owned value. Read more