Comments (3)
Hmm, yeah, I think you're right. The intent was to make sure the caller couldn't collect the SqliteRow
handles being passed into the closure; e.g.,
let rows = query.query_map(&[], |row| row);
but even without the T: 'static
I don't think it's possible to get this to compile. I wonder if a solution to this open bug (related to this SO question about closures that return references) would make it possible to write this, at which point the T: 'static
would no longer be redundant. What do you think?
from rusqlite.
Oh, now I see the reason of that static
. But the worst thing that would happen, if somebody's collected these rows, would be just a panic, nothing more, right?
So if the 'static
were removed, the bug (still not fixed 😞) wouldn't prevent returning rows from a closure (the workarounds are really simple (create standalone fn
or just don't use annotations)).
But I think there's a way to prevent collecting rows without restricting T
! I you'd change the F
type inside MappedRows
from FnMut(SqliteRow) -> T
to FnMut(&SqliteRow) -> T
, Rust would naturally prevent the short-lived reference from escaping the closure body. And since SqliteRow
is not Copy
, then no panics guaranteed! (expect of somebody calling .get(999)
of course.
from rusqlite.
But the worst thing that would happen, if somebody's collected these rows, would be just a panic, nothing more, right?
Correct. And actually just collecting them is fine; it'd just panic if someone tried to use a collected row other than the last one.
I you'd change the
F
type insideMappedRows
fromFnMut(SqliteRow) -> T
toFnMut(&SqliteRow) -> T
, Rust would naturally prevent the short-lived reference from escaping the closure body.
Ahh, that's a great point. Will make that change shortly.
from rusqlite.
Related Issues (20)
- FromSql vs TryFrom / ToSql vs TryInto HOT 1
- `sqlite3_compileoption_used` and Rust `const fn`
- called `Result::unwrap()` on an `Err` value: SqliteFailure(Error { code: Unknown, extended_code: 1 }, Some("json_object() requires an even number of arguments")) HOT 2
- Apps using `winsqlite3` feature no longer builds HOT 5
- Question: Is there any way to use SQLite 3.45 with rusqlite 0.30.0? HOT 2
- Trait for abstracting over `Connection`/`Transaction`? HOT 3
- SqlInputError { error: Error { code: Unknown, extended_code: 1 }, msg: "unrecognized token: \"{\"" HOT 1
- Release 0.31.0 with SQLite 3.45? HOT 2
- Type issue on select with digits only in a "string" colums. HOT 2
- wasm32-wasi target fails on Apple M3
- How to get "returning *" from insert HOT 3
- Stale Connection Handler on Multi-Threaded Situation HOT 1
- sqlite3_snapshot iteration HOT 2
- Creating `Value::Blob` without necessarily allocating heap HOT 5
- Using rusqlite::vtab::VTabConnection::handle() HOT 4
- Add bindings for `sqlite3_trace_v2` API HOT 4
- iOS Linker Warning: SQLite was build for newer version than being linked HOT 2
- the first query is failure due to below error HOT 1
- Segmentation fault when writing encrypted database with vendored SQLCipher and OpenSSL on OpenBSD
- Adding feature `array` seems to cause a compile failure HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rusqlite.