Introduce IndexConstraintUsage

This commit is contained in:
gwenn
2016-08-20 12:06:24 +02:00
parent b11a4b1c73
commit 58b7d62517
2 changed files with 28 additions and 20 deletions

View File

@@ -95,21 +95,13 @@ impl IndexInfo {
}
/// if `argv_index` > 0, constraint is part of argv to xFilter
pub fn set_argv_index(&mut self, constraint_idx: usize, argv_index: libc::c_int) {
unsafe {
let mut constraint_usages = slice::from_raw_parts_mut((*self.0).aConstraintUsage,
(*self.0).nConstraint as usize);
constraint_usages[constraint_idx].argvIndex = argv_index;
}
}
/// if `omit`, do not code a test for this constraint
pub fn set_omit(&mut self, constraint_idx: usize, omit: bool) {
unsafe {
let mut constraint_usages = slice::from_raw_parts_mut((*self.0).aConstraintUsage,
(*self.0).nConstraint as usize);
constraint_usages[constraint_idx].omit = if omit { 1 } else { 0 };
}
pub fn constraint_usage(&mut self, constraint_idx: usize) -> IndexConstraintUsage {
let mut constraint_usages = unsafe {
slice::from_raw_parts_mut((*self.0).aConstraintUsage, (*self.0).nConstraint as usize)
};
IndexConstraintUsage(&mut constraint_usages[constraint_idx])
}
/// Number used to identify the index
pub fn set_idx_num(&mut self, idx_num: libc::c_int) {
unsafe {
@@ -168,6 +160,19 @@ impl<'a> IndexConstraint<'a> {
}
}
pub struct IndexConstraintUsage<'a>(&'a mut ffi::Struct_sqlite3_index_constraint_usage);
impl<'a> IndexConstraintUsage<'a> {
/// if `argv_index` > 0, constraint is part of argv to xFilter
pub fn set_argv_index(&mut self, argv_index: libc::c_int) {
self.0.argvIndex = argv_index;
}
/// if `omit`, do not code a test for this constraint
pub fn set_omit(&mut self, omit: bool) {
self.0.omit = if omit { 1 } else { 0 };
}
}
/// Virtual table cursor trait.
pub trait VTabCursor<V: VTab<Self>>: Sized {
/// Accessor to the associated virtual table.