Add some missing wrappers (#1139)

* Add some missing wrappers:

sqlite3_value_subtype
sqlite3_result_subtype
sqlite3_changes64
sqlite3_db_readonly
sqlite3_txn_state
sqlite3_stmt_isexplain
sqlite3_vtab_config
sqlite3_index_info.idxFlags
sqlite3_index_info.colUsed
sqlite3_index_info.idxStr
sqlite3_vtab_collation

* Mark series VTab as innocuous and csv as direct only
This commit is contained in:
gwenn
2022-03-17 19:58:02 +01:00
committed by GitHub
parent 2afbdeeb52
commit 5e2c103a0c
15 changed files with 287 additions and 21 deletions

View File

@@ -727,6 +727,7 @@ impl Statement<'_> {
#[cfg(feature = "blob")]
ToSqlOutput::ZeroBlob(len) => {
// TODO sqlite3_bind_zeroblob64 // 3.8.11
return self
.conn
.decode_result(unsafe { ffi::sqlite3_bind_zeroblob(ptr, col as c_int, len) });
@@ -750,6 +751,7 @@ impl Statement<'_> {
ValueRef::Real(r) => unsafe { ffi::sqlite3_bind_double(ptr, col as c_int, r) },
ValueRef::Text(s) => unsafe {
let (c_str, len, destructor) = str_for_sqlite(s)?;
// TODO sqlite3_bind_text64 // 3.8.7
ffi::sqlite3_bind_text(ptr, col as c_int, c_str, len, destructor)
},
ValueRef::Blob(b) => unsafe {
@@ -757,6 +759,7 @@ impl Statement<'_> {
if length == 0 {
ffi::sqlite3_bind_zeroblob(ptr, col as c_int, 0)
} else {
// TODO sqlite3_bind_blob64 // 3.8.7
ffi::sqlite3_bind_blob(
ptr,
col as c_int,
@@ -838,6 +841,16 @@ impl Statement<'_> {
self.stmt.get_status(status, true)
}
/// Returns 1 if the prepared statement is an EXPLAIN statement,
/// or 2 if the statement is an EXPLAIN QUERY PLAN,
/// or 0 if it is an ordinary statement or a NULL pointer.
#[inline]
#[cfg(feature = "modern_sqlite")] // 3.28.0
#[cfg_attr(docsrs, doc(cfg(feature = "modern_sqlite")))]
pub fn is_explain(&self) -> i32 {
self.stmt.is_explain()
}
#[cfg(feature = "extra_check")]
#[inline]
pub(crate) fn check_no_tail(&self) -> Result<()> {
@@ -985,15 +998,15 @@ pub enum StatementStatus {
AutoIndex = 3,
/// Equivalent to SQLITE_STMTSTATUS_VM_STEP
VmStep = 4,
/// Equivalent to SQLITE_STMTSTATUS_REPREPARE
/// Equivalent to SQLITE_STMTSTATUS_REPREPARE (3.20.0)
RePrepare = 5,
/// Equivalent to SQLITE_STMTSTATUS_RUN
/// Equivalent to SQLITE_STMTSTATUS_RUN (3.20.0)
Run = 6,
/// Equivalent to SQLITE_STMTSTATUS_FILTER_MISS
FilterMiss = 7,
/// Equivalent to SQLITE_STMTSTATUS_FILTER_HIT
FilterHit = 8,
/// Equivalent to SQLITE_STMTSTATUS_MEMUSED
/// Equivalent to SQLITE_STMTSTATUS_MEMUSED (3.20.0)
MemUsed = 99,
}
@@ -1508,4 +1521,13 @@ mod test {
assert_eq!(expected, actual);
Ok(())
}
#[test]
#[cfg(feature = "modern_sqlite")]
fn is_explain() -> Result<()> {
let db = Connection::open_in_memory()?;
let stmt = db.prepare("SELECT 1;")?;
assert_eq!(0, stmt.is_explain());
Ok(())
}
}