pub struct Index {
pub name: String,
pub table_name: String,
pub root_page: i64,
pub columns: Vec<IndexColumn>,
pub unique: bool,
pub ephemeral: bool,
pub has_rowid: bool,
pub where_clause: Option<Box<Expr>>,
pub index_method: Option<Arc<dyn IndexMethodAttachment>>,
pub on_conflict: Option<ResolveType>,
}Fields§
§name: String§table_name: String§root_page: i64§columns: Vec<IndexColumn>§unique: bool§ephemeral: bool§has_rowid: boolDoes the index have a rowid as the last column? This is the case for btree indexes (persistent or ephemeral) that have been created based on a table with a rowid. For example, WITHOUT ROWID tables and SELECT DISTINCT ephemeral indexes will not have a rowid.
where_clause: Option<Box<Expr>>§index_method: Option<Arc<dyn IndexMethodAttachment>>§on_conflict: Option<ResolveType>ON CONFLICT clause from the constraint definition (PRIMARY KEY or UNIQUE).
Implementations§
Source§impl Index
impl Index
pub fn from_sql( syms: &SymbolTable, sql: &str, root_page: i64, table: &BTreeTable, ) -> Result<Index>
Sourcepub fn is_expression_index(&self) -> bool
pub fn is_expression_index(&self) -> bool
Check if this is an expression index.
Sourcepub fn is_backing_btree_index(&self) -> bool
pub fn is_backing_btree_index(&self) -> bool
check if this is special backing_btree index created and managed by custom index_method
pub fn automatic_from_primary_key( table: &BTreeTable, auto_index: (String, i64), column_count: usize, conflict_clause: Option<ResolveType>, collation_overrides: &[Option<CollationSeq>], ) -> Result<Index>
pub fn automatic_from_unique( table: &BTreeTable, auto_index: (String, i64), column_indices_and_sort_orders: Vec<(usize, SortOrder)>, conflict_clause: Option<ResolveType>, collation_overrides: &[Option<CollationSeq>], ) -> Result<Index>
Sourcepub fn column_table_pos_to_index_pos(&self, table_pos: usize) -> Option<usize>
pub fn column_table_pos_to_index_pos(&self, table_pos: usize) -> Option<usize>
Given a column position in the table, return the position in the index. Returns None if the column is not found in the index. For example, given: CREATE TABLE t (a, b, c) CREATE INDEX idx ON t(b) then column_table_pos_to_index_pos(1) returns Some(0)
Sourcepub fn expression_to_index_pos(&self, expr: &Expr) -> Option<usize>
pub fn expression_to_index_pos(&self, expr: &Expr) -> Option<usize>
Given an expression, return the position in the index if it matches an expression index column. Expression index matching is textual (after binding), so the caller should normalize the query expression to resemble the stored index expression (e.g. unqualified column names).
Sourcepub fn validate_where_expr(
&self,
table: &Table,
_resolver: &Resolver<'_>,
) -> bool
pub fn validate_where_expr( &self, table: &Table, _resolver: &Resolver<'_>, ) -> bool
Walk the where_clause Expr of a partial index and validate that it doesn’t reference any other tables or use any disallowed constructs.
pub fn bind_where_expr( &self, table_refs: Option<&mut TableReferences>, resolver: &Resolver<'_>, ) -> Option<Expr>
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Index
impl !UnwindSafe for Index
impl Freeze for Index
impl Send for Index
impl Sync for Index
impl Unpin for Index
impl UnsafeUnpin for Index
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
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> ⓘ
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> ⓘ
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