pub struct IndexCreateStatement { /* private fields */ }Expand description
Create an index for an existing table
§Examples
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .name("idx-glyph-aspect")
    .table(Glyph::Table)
    .col(Glyph::Aspect)
    .to_owned();
assert_eq!(
    index.to_string(MysqlQueryBuilder),
    r#"CREATE INDEX `idx-glyph-aspect` ON `glyph` (`aspect`)"#
);
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect")"#
);
assert_eq!(
    index.to_string(SqliteQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect")"#
);Create index if not exists
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .if_not_exists()
    .name("idx-glyph-aspect")
    .table(Glyph::Table)
    .col(Glyph::Aspect)
    .to_owned();
assert_eq!(
    index.to_string(MysqlQueryBuilder),
    r#"CREATE INDEX `idx-glyph-aspect` ON `glyph` (`aspect`)"#
);
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE INDEX IF NOT EXISTS "idx-glyph-aspect" ON "glyph" ("aspect")"#
);
assert_eq!(
    index.to_string(SqliteQueryBuilder),
    r#"CREATE INDEX IF NOT EXISTS "idx-glyph-aspect" ON "glyph" ("aspect")"#
);Index with prefix
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .name("idx-glyph-aspect")
    .table(Glyph::Table)
    .col((Glyph::Aspect, 128))
    .to_owned();
assert_eq!(
    index.to_string(MysqlQueryBuilder),
    r#"CREATE INDEX `idx-glyph-aspect` ON `glyph` (`aspect` (128))"#
);
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect" (128))"#
);
assert_eq!(
    index.to_string(SqliteQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect")"#
);Index with order
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .name("idx-glyph-aspect")
    .table(Glyph::Table)
    .col((Glyph::Aspect, IndexOrder::Desc))
    .to_owned();
assert_eq!(
    index.to_string(MysqlQueryBuilder),
    r#"CREATE INDEX `idx-glyph-aspect` ON `glyph` (`aspect` DESC)"#
);
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect" DESC)"#
);
assert_eq!(
    index.to_string(SqliteQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect" DESC)"#
);Index on multi-columns
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .name("idx-glyph-aspect")
    .table(Glyph::Table)
    .col((Glyph::Image, IndexOrder::Asc))
    .col((Glyph::Aspect, IndexOrder::Desc))
    .unique()
    .to_owned();
assert_eq!(
    index.to_string(MysqlQueryBuilder),
    r#"CREATE UNIQUE INDEX `idx-glyph-aspect` ON `glyph` (`image` ASC, `aspect` DESC)"#
);
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE UNIQUE INDEX "idx-glyph-aspect" ON "glyph" ("image" ASC, "aspect" DESC)"#
);
assert_eq!(
    index.to_string(SqliteQueryBuilder),
    r#"CREATE UNIQUE INDEX "idx-glyph-aspect" ON "glyph" ("image" ASC, "aspect" DESC)"#
);Index with prefix and order
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .name("idx-glyph-aspect")
    .table(Glyph::Table)
    .col((Glyph::Aspect, 64, IndexOrder::Asc))
    .to_owned();
assert_eq!(
    index.to_string(MysqlQueryBuilder),
    r#"CREATE INDEX `idx-glyph-aspect` ON `glyph` (`aspect` (64) ASC)"#
);
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect" (64) ASC)"#
);
assert_eq!(
    index.to_string(SqliteQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect" ASC)"#
);Partial Index with prefix and order
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .name("idx-glyph-aspect")
    .table(Glyph::Table)
    .col((Glyph::Aspect, 64, IndexOrder::Asc))
    .and_where(Expr::col((Glyph::Table, Glyph::Aspect)).is_in(vec![3, 4]))
    .to_owned();
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect" (64) ASC) WHERE "glyph"."aspect" IN (3, 4)"#
);
assert_eq!(
    index.to_string(SqliteQueryBuilder),
    r#"CREATE INDEX "idx-glyph-aspect" ON "glyph" ("aspect" ASC) WHERE "glyph"."aspect" IN (3, 4)"#
);Index include non-key columns
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .name("idx-font-name-include-language")
    .table(Font::Table)
    .col(Font::Name)
    .include(Font::Language)
    .to_owned();
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE INDEX "idx-font-name-include-language" ON "font" ("name") INCLUDE ("language")"#
)Functional Index
use sea_query::{tests_cfg::*, *};
let index = Index::create()
    .name("idx-character-area")
    .table(Character::Table)
    .col(Expr::col(Character::SizeH).mul(Expr::col(Character::SizeW)))
    .to_owned();
assert_eq!(
    index.to_string(MysqlQueryBuilder),
    "CREATE INDEX `idx-character-area` ON `character` ((`size_h` * `size_w`))"
);
assert_eq!(
    index.to_string(PostgresQueryBuilder),
    r#"CREATE INDEX "idx-character-area" ON "character" (("size_h" * "size_w"))"#
);Implementations§
Source§impl IndexCreateStatement
 
impl IndexCreateStatement
Sourcepub fn new() -> IndexCreateStatement
 
pub fn new() -> IndexCreateStatement
Construct a new IndexCreateStatement
Sourcepub fn if_not_exists(&mut self) -> &mut IndexCreateStatement
 
pub fn if_not_exists(&mut self) -> &mut IndexCreateStatement
Create index if index not exists
Sourcepub fn name<T>(&mut self, name: T) -> &mut IndexCreateStatement
 
pub fn name<T>(&mut self, name: T) -> &mut IndexCreateStatement
Set index name
Sourcepub fn table<T>(&mut self, table: T) -> &mut IndexCreateStatementwhere
    T: IntoTableRef,
 
pub fn table<T>(&mut self, table: T) -> &mut IndexCreateStatementwhere
    T: IntoTableRef,
Set target table
Sourcepub fn col<C>(&mut self, col: C) -> &mut IndexCreateStatementwhere
    C: IntoIndexColumn,
 
pub fn col<C>(&mut self, col: C) -> &mut IndexCreateStatementwhere
    C: IntoIndexColumn,
Add index column
Sourcepub fn primary(&mut self) -> &mut IndexCreateStatement
 
pub fn primary(&mut self) -> &mut IndexCreateStatement
Set index as primary
Sourcepub fn unique(&mut self) -> &mut IndexCreateStatement
 
pub fn unique(&mut self) -> &mut IndexCreateStatement
Set index as unique
Sourcepub fn nulls_not_distinct(&mut self) -> &mut IndexCreateStatement
 
pub fn nulls_not_distinct(&mut self) -> &mut IndexCreateStatement
Set nulls to not be treated as distinct values. Only available on Postgres.
Sourcepub fn full_text(&mut self) -> &mut IndexCreateStatement
 
pub fn full_text(&mut self) -> &mut IndexCreateStatement
Set index as full text.
On MySQL, this is FULLTEXT.
On PgSQL, this is GIN.
Sourcepub fn index_type(&mut self, index_type: IndexType) -> &mut IndexCreateStatement
 
pub fn index_type(&mut self, index_type: IndexType) -> &mut IndexCreateStatement
Set index type. Not available on Sqlite.
pub fn include<C>(&mut self, col: C) -> &mut IndexCreateStatementwhere
    C: IntoIden,
pub fn is_primary_key(&self) -> bool
pub fn is_unique_key(&self) -> bool
pub fn is_nulls_not_distinct(&self) -> bool
pub fn get_index_spec(&self) -> &TableIndex
pub fn take(&mut self) -> IndexCreateStatement
Source§impl IndexCreateStatement
 
impl IndexCreateStatement
Sourcepub fn build<T>(&self, schema_builder: T) -> Stringwhere
    T: SchemaBuilder,
 
pub fn build<T>(&self, schema_builder: T) -> Stringwhere
    T: SchemaBuilder,
Sourcepub fn build_any(&self, schema_builder: &dyn SchemaBuilder) -> String
 
pub fn build_any(&self, schema_builder: &dyn SchemaBuilder) -> String
Sourcepub 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§
Source§impl Clone for IndexCreateStatement
 
impl Clone for IndexCreateStatement
Source§fn clone(&self) -> IndexCreateStatement
 
fn clone(&self) -> IndexCreateStatement
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 moreSource§impl ConditionalStatement for IndexCreateStatement
 
impl ConditionalStatement for IndexCreateStatement
Source§fn cond_where<C>(&mut self, condition: C) -> &mut IndexCreateStatementwhere
    C: IntoCondition,
 
fn cond_where<C>(&mut self, condition: C) -> &mut IndexCreateStatementwhere
    C: IntoCondition,
Where condition, expressed with 
any and all.
Calling cond_where multiple times will conjoin them.
Calling or_where after cond_where will panic. Read moreSource§fn and_where(&mut self, other: SimpleExpr) -> &mut Self
 
fn and_where(&mut self, other: SimpleExpr) -> &mut Self
Source§fn and_where_option(&mut self, other: Option<SimpleExpr>) -> &mut Self
 
fn and_where_option(&mut self, other: Option<SimpleExpr>) -> &mut Self
Optional and where, short hand for 
if c.is_some() q.and_where(c). Read moreSource§impl Debug for IndexCreateStatement
 
impl Debug for IndexCreateStatement
Source§impl Default for IndexCreateStatement
 
impl Default for IndexCreateStatement
Source§fn default() -> IndexCreateStatement
 
fn default() -> IndexCreateStatement
Returns the “default value” for a type. Read more
Source§impl SchemaStatementBuilder for IndexCreateStatement
 
impl SchemaStatementBuilder for IndexCreateStatement
Source§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
Source§fn build_any(&self, schema_builder: &dyn SchemaBuilder) -> String
 
fn build_any(&self, schema_builder: &dyn SchemaBuilder) -> String
Build corresponding SQL statement for certain database backend and return SQL string
Source§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 IndexCreateStatement
impl !RefUnwindSafe for IndexCreateStatement
impl Send for IndexCreateStatement
impl Sync for IndexCreateStatement
impl Unpin for IndexCreateStatement
impl !UnwindSafe for IndexCreateStatement
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
Source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
Source§impl<T> Instrument for T
 
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
 
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts 
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts 
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more