mirror of
https://github.com/isar/rusqlite.git
synced 2025-03-29 09:02:57 +08:00
Add example of OwningRows using Ouroboros
This commit is contained in:
parent
def8e9460d
commit
7dbc3175f9
@ -132,6 +132,7 @@ lazy_static = "1.4"
|
|||||||
regex = "1.5.5"
|
regex = "1.5.5"
|
||||||
uuid = { version = "1.0", features = ["v4"] }
|
uuid = { version = "1.0", features = ["v4"] }
|
||||||
unicase = "2.6.0"
|
unicase = "2.6.0"
|
||||||
|
ouroboros = "0.18"
|
||||||
# Use `bencher` over criterion because it builds much faster and we don't have
|
# Use `bencher` over criterion because it builds much faster and we don't have
|
||||||
# many benchmarks
|
# many benchmarks
|
||||||
bencher = "0.1"
|
bencher = "0.1"
|
||||||
|
29
examples/owning_rows.rs
Normal file
29
examples/owning_rows.rs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
extern crate rusqlite;
|
||||||
|
|
||||||
|
use ouroboros::self_referencing;
|
||||||
|
use rusqlite::{CachedStatement, Connection, Result, Rows};
|
||||||
|
|
||||||
|
#[self_referencing]
|
||||||
|
struct OwningRows<'conn> {
|
||||||
|
stmt: CachedStatement<'conn>,
|
||||||
|
#[borrows(mut stmt)]
|
||||||
|
#[covariant]
|
||||||
|
rows: Rows<'this>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
let conn = Connection::open_in_memory()?;
|
||||||
|
let stmt = conn.prepare_cached("SELECT 1")?;
|
||||||
|
let mut or = OwningRowsTryBuilder {
|
||||||
|
stmt,
|
||||||
|
rows_builder: |s| s.query([]),
|
||||||
|
}
|
||||||
|
.try_build()?;
|
||||||
|
or.with_rows_mut(|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