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: boolWhether the key is stored descending.
declared_descending: boolWhether 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
impl IndexColumnInfo
Sourcepub fn plain_column(&self) -> Option<u16>
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.
Sourcepub fn computed_text(&self, table: &TableInfo) -> Option<Vec<u8>>
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