mirror of
https://github.com/isar/rusqlite.git
synced 2025-03-25 23:06:04 +08:00
Add example of OwningRows using self_cell
This commit is contained in:
parent
70d192d3cd
commit
93787c6855
@ -146,6 +146,7 @@ regex = "1.5.5"
|
||||
uuid = { version = "1.0", features = ["v4"] }
|
||||
unicase = "2.6.0"
|
||||
ouroboros = "0.18"
|
||||
self_cell = { git = "https://github.com/Voultapher/self_cell.git" }
|
||||
# Use `bencher` over criterion because it builds much faster,
|
||||
# and we don't have many benchmarks
|
||||
bencher = "0.1"
|
||||
|
27
examples/owning_rows_self_cell.rs
Normal file
27
examples/owning_rows_self_cell.rs
Normal file
@ -0,0 +1,27 @@
|
||||
extern crate rusqlite;
|
||||
|
||||
use rusqlite::{CachedStatement, Connection, Result, Rows};
|
||||
use self_cell::{self_cell, MutBorrow};
|
||||
|
||||
type RowsRef<'a> = Rows<'a>;
|
||||
|
||||
self_cell!(
|
||||
struct OwningRows<'conn> {
|
||||
owner: MutBorrow<CachedStatement<'conn>>,
|
||||
#[covariant]
|
||||
dependent: RowsRef,
|
||||
}
|
||||
);
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let conn = Connection::open_in_memory()?;
|
||||
let stmt = conn.prepare_cached("SELECT 1")?;
|
||||
let mut or = OwningRows::try_new(MutBorrow::new(stmt), |s| s.borrow_mut().query([]))?;
|
||||
or.with_dependent_mut(|_stmt, rows| -> Result<()> {
|
||||
while let Some(row) = rows.next()? {
|
||||
assert_eq!(Ok(1), row.get(0));
|
||||
}
|
||||
Ok(())
|
||||
})?;
|
||||
Ok(())
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user