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.