Skip to main content

IndexColumnInfo

Struct IndexColumnInfo 

Source
pub struct IndexColumnInfo {
    pub column: Option<u16>,
    pub expr_sql: Option<Vec<u8>>,
    pub collation: Vec<u8>,
    pub descending: bool,
    pub declared_descending: bool,
}
Expand description

One key column of an index.

Fields§

§column: Option<u16>

The table column this key indexes, when it indexes a bare column.

§expr_sql: Option<Vec<u8>>

The key expression, as written, when the key is an expression.

§collation: Vec<u8>

The folded collation name the key is ordered by.

§descending: bool

Whether the key is stored descending.

§declared_descending: bool

Whether the declaration said descending, whatever the storage does.

A different question from descending, and the two used to be one. This engine’s trees are always built ascending, so the catalog flattens descending to false for the planner’s sake - a planner told about a descending tree that does not exist draws three inverted conclusions (see inillucent-catalog’s stored_ascending). But PRAGMA index_xinfo reports what was declared, and an application reading it to reconstruct a CREATE INDEX needs the DESC back.

Implementations§

Source§

impl IndexColumnInfo

Source

pub fn plain_column(&self) -> Option<u16>

Returns the table column the key holds as it is stored, when it holds one.

Not the same as column. A key on a VIRTUAL generated column names that column, so PRAGMA index_info, a unique violation’s message and DROP COLUMN all see it, and it also carries the column’s expression in expr_sql, because the column is in no record and every entry has to be computed. The binder replaces a reference to such a column with its expression, so a planner that matched the key by column would never find a term to seek on. The planner reads this instead and matches a computed key by its expression.

Source

pub fn computed_text(&self, table: &TableInfo) -> Option<Vec<u8>>

Returns the text a computed key is evaluated from, when the key is one.

An expression key is its own text. A key on a VIRTUAL generated column is the column’s name instead of the column’s expression: reading the column through the binder converts the value with the column’s affinity, which is the value SQLite puts in the index, and the bare expression is not that value (k INT AS (a) over '1' is the integer 1, and the expression alone gives the text).

@param table - the table the index is on

Trait Implementations§

Source§

impl Clone for IndexColumnInfo

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for IndexColumnInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for IndexColumnInfo

Source§

impl PartialEq for IndexColumnInfo

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for IndexColumnInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.