//! Array Virtual Table. //! //! Note: `rarray`, not `carray` is the name of the table valued function we //! define. //! //! Port of [carray](http://www.sqlite.org/cgi/src/finfo?name=ext/misc/carray.c) //! C extension: `https://www.sqlite.org/carray.html` //! //! # Example //! //! ```rust,no_run //! # use rusqlite::{types::Value, Connection, Result, params}; //! # use std::rc::Rc; //! fn example(db: &Connection) -> Result<()> { //! // Note: This should be done once (usually when opening the DB). //! rusqlite::vtab::array::load_module(&db)?; //! let v = [1i64, 2, 3, 4]; //! // Note: A `Rc<Vec<Value>>` must be used as the parameter. //! let values = Rc::new(v.iter().copied().map(Value::from).collect::<Vec<Value>>()); //! let mut stmt = db.prepare("SELECT value from rarray(?1);")?; //! let rows = stmt.query_map([values], |row| row.get::<_, i64>(0))?; //! for value in rows { //! println!("{}", value?); //! } //! Ok(()) //! } //! ```
use std::default::Default; use std::marker::PhantomData; use std::os::raw::{c_char, c_int, c_void}; use std::rc::Rc;
/// A cursor for the Array virtual table #[repr(C)] struct ArrayTabCursor<'vtab> { /// Base class. Must be first
base: ffi::sqlite3_vtab_cursor, /// The rowid
row_id: i64, /// Pointer to the array of values ("pointer")
ptr: Option<Array>,
phantom: PhantomData<&'vtab ArrayTab>,
}
#[cfg(test)] mod test { usecrate::types::Value; usecrate::vtab::array; usecrate::{Connection, Result}; use std::rc::Rc;
#[test] fn test_array_module() -> Result<()> { let db = Connection::open_in_memory()?;
array::load_module(&db)?;
let v = vec![1i64, 2, 3, 4]; let values: Vec<Value> = v.into_iter().map(Value::from).collect(); let ptr = Rc::new(values);
{ letmut stmt = db.prepare("SELECT value from rarray(?1);")?;
let rows = stmt.query_map([&ptr], |row| row.get::<_, i64>(0))?;
assert_eq!(2, Rc::strong_count(&ptr)); letmut count = 0; for (i, value) in rows.enumerate() {
assert_eq!(i as i64, value? - 1);
count += 1;
}
assert_eq!(4, count);
}
assert_eq!(1, Rc::strong_count(&ptr));
Ok(())
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-19)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.