mirror of
https://github.com/isar/rusqlite.git
synced 2024-11-26 19:41:37 +08:00
Rename SqliteRow
-> Row
.
This commit is contained in:
parent
b932640181
commit
ea5cb41bbf
@ -6,6 +6,7 @@
|
|||||||
* `SqliteResult` is now `Result`
|
* `SqliteResult` is now `Result`
|
||||||
* `SqliteStatement` is now `Statement`
|
* `SqliteStatement` is now `Statement`
|
||||||
* `SqliteRows` is now `Rows`
|
* `SqliteRows` is now `Rows`
|
||||||
|
* `SqliteRow` is now `Row`
|
||||||
The old, prefixed names are still exported should be considered deprecated.
|
The old, prefixed names are still exported should be considered deprecated.
|
||||||
* Adds a variety of `..._named` methods for executing queries using named placeholder parameters.
|
* Adds a variety of `..._named` methods for executing queries using named placeholder parameters.
|
||||||
* Adds `backup` feature that exposes SQLite's online backup API.
|
* Adds `backup` feature that exposes SQLite's online backup API.
|
||||||
|
@ -56,7 +56,7 @@ fn main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Design of SqliteRows and SqliteRow
|
### Design of Rows and Row
|
||||||
|
|
||||||
To retrieve the result rows from a query, SQLite requires you to call
|
To retrieve the result rows from a query, SQLite requires you to call
|
||||||
[sqlite3_step()](https://www.sqlite.org/c3ref/step.html) on a prepared statement. You can only
|
[sqlite3_step()](https://www.sqlite.org/c3ref/step.html) on a prepared statement. You can only
|
||||||
@ -67,7 +67,7 @@ satisfy the [Iterator](http://doc.rust-lang.org/std/iter/trait.Iterator.html) tr
|
|||||||
you cannot (as easily) loop over the rows, or use many of the helpful Iterator methods like `map`
|
you cannot (as easily) loop over the rows, or use many of the helpful Iterator methods like `map`
|
||||||
and `filter`.
|
and `filter`.
|
||||||
|
|
||||||
Instead, Rusqlite's `SqliteRows` handle does conform to `Iterator`. It ensures safety by
|
Instead, Rusqlite's `Rows` handle does conform to `Iterator`. It ensures safety by
|
||||||
performing checks at runtime to ensure you do not try to retrieve the values of a "stale" row, and
|
performing checks at runtime to ensure you do not try to retrieve the values of a "stale" row, and
|
||||||
will panic if you do so. A specific example that will panic:
|
will panic if you do so. A specific example that will panic:
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ fn bad_function_will_panic(conn: &Connection) -> Result<i64> {
|
|||||||
```
|
```
|
||||||
|
|
||||||
There are other, less obvious things that may result in a panic as well, such as calling
|
There are other, less obvious things that may result in a panic as well, such as calling
|
||||||
`collect()` on a `SqliteRows` and then trying to use the collected rows.
|
`collect()` on a `Rows` and then trying to use the collected rows.
|
||||||
|
|
||||||
Strongly consider using the method `query_map()` instead, if you can.
|
Strongly consider using the method `query_map()` instead, if you can.
|
||||||
`query_map()` returns an iterator over rows-mapped-to-some-type. This
|
`query_map()` returns an iterator over rows-mapped-to-some-type. This
|
||||||
|
31
src/lib.rs
31
src/lib.rs
@ -379,7 +379,7 @@ impl Connection {
|
|||||||
/// Will return `Err` if `sql` cannot be converted to a C-compatible string or if the
|
/// Will return `Err` if `sql` cannot be converted to a C-compatible string or if the
|
||||||
/// underlying SQLite call fails.
|
/// underlying SQLite call fails.
|
||||||
pub fn query_row<T, F>(&self, sql: &str, params: &[&ToSql], f: F) -> Result<T>
|
pub fn query_row<T, F>(&self, sql: &str, params: &[&ToSql], f: F) -> Result<T>
|
||||||
where F: FnOnce(SqliteRow) -> T
|
where F: FnOnce(Row) -> T
|
||||||
{
|
{
|
||||||
let mut stmt = try!(self.prepare(sql));
|
let mut stmt = try!(self.prepare(sql));
|
||||||
let mut rows = try!(stmt.query(params));
|
let mut rows = try!(stmt.query(params));
|
||||||
@ -409,7 +409,7 @@ impl Connection {
|
|||||||
/// Will return `Err` if `sql` cannot be converted to a C-compatible string or if the
|
/// Will return `Err` if `sql` cannot be converted to a C-compatible string or if the
|
||||||
/// underlying SQLite call fails.
|
/// underlying SQLite call fails.
|
||||||
pub fn query_row_and_then<T, E, F>(&self, sql: &str, params: &[&ToSql], f: F) -> result::Result<T, E>
|
pub fn query_row_and_then<T, E, F>(&self, sql: &str, params: &[&ToSql], f: F) -> result::Result<T, E>
|
||||||
where F: FnOnce(SqliteRow) -> result::Result<T, E>,
|
where F: FnOnce(Row) -> result::Result<T, E>,
|
||||||
E: convert::From<Error>
|
E: convert::From<Error>
|
||||||
{
|
{
|
||||||
let mut stmt = try!(self.prepare(sql));
|
let mut stmt = try!(self.prepare(sql));
|
||||||
@ -438,7 +438,7 @@ impl Connection {
|
|||||||
/// This method should be considered deprecated. Use `query_row` instead, which now
|
/// This method should be considered deprecated. Use `query_row` instead, which now
|
||||||
/// does exactly the same thing.
|
/// does exactly the same thing.
|
||||||
pub fn query_row_safe<T, F>(&self, sql: &str, params: &[&ToSql], f: F) -> Result<T>
|
pub fn query_row_safe<T, F>(&self, sql: &str, params: &[&ToSql], f: F) -> Result<T>
|
||||||
where F: FnOnce(SqliteRow) -> T
|
where F: FnOnce(Row) -> T
|
||||||
{
|
{
|
||||||
self.query_row(sql, params, f)
|
self.query_row(sql, params, f)
|
||||||
}
|
}
|
||||||
@ -865,7 +865,7 @@ impl<'conn> Statement<'conn> {
|
|||||||
params: &[&ToSql],
|
params: &[&ToSql],
|
||||||
f: F)
|
f: F)
|
||||||
-> Result<MappedRows<'a, F>>
|
-> Result<MappedRows<'a, F>>
|
||||||
where F: FnMut(&SqliteRow) -> T
|
where F: FnMut(&Row) -> T
|
||||||
{
|
{
|
||||||
let row_iter = try!(self.query(params));
|
let row_iter = try!(self.query(params));
|
||||||
|
|
||||||
@ -890,7 +890,7 @@ impl<'conn> Statement<'conn> {
|
|||||||
f: F)
|
f: F)
|
||||||
-> Result<AndThenRows<'a, F>>
|
-> Result<AndThenRows<'a, F>>
|
||||||
where E: convert::From<Error>,
|
where E: convert::From<Error>,
|
||||||
F: FnMut(&SqliteRow) -> result::Result<T, E>
|
F: FnMut(&Row) -> result::Result<T, E>
|
||||||
{
|
{
|
||||||
let row_iter = try!(self.query(params));
|
let row_iter = try!(self.query(params));
|
||||||
|
|
||||||
@ -968,7 +968,7 @@ pub struct MappedRows<'stmt, F> {
|
|||||||
map: F,
|
map: F,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'stmt, T, F> Iterator for MappedRows<'stmt, F> where F: FnMut(&SqliteRow) -> T
|
impl<'stmt, T, F> Iterator for MappedRows<'stmt, F> where F: FnMut(&Row) -> T
|
||||||
{
|
{
|
||||||
type Item = Result<T>;
|
type Item = Result<T>;
|
||||||
|
|
||||||
@ -986,7 +986,7 @@ pub struct AndThenRows<'stmt, F> {
|
|||||||
|
|
||||||
impl<'stmt, T, E, F> Iterator for AndThenRows<'stmt, F>
|
impl<'stmt, T, E, F> Iterator for AndThenRows<'stmt, F>
|
||||||
where E: convert::From<Error>,
|
where E: convert::From<Error>,
|
||||||
F: FnMut(&SqliteRow) -> result::Result<T, E>
|
F: FnMut(&Row) -> result::Result<T, E>
|
||||||
{
|
{
|
||||||
type Item = result::Result<T, E>;
|
type Item = result::Result<T, E>;
|
||||||
|
|
||||||
@ -1051,7 +1051,7 @@ impl<'stmt> Rows<'stmt> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_expected_row(&mut self) -> Result<SqliteRow<'stmt>> {
|
fn get_expected_row(&mut self) -> Result<Row<'stmt>> {
|
||||||
match self.next() {
|
match self.next() {
|
||||||
Some(row) => row,
|
Some(row) => row,
|
||||||
None => {
|
None => {
|
||||||
@ -1065,9 +1065,9 @@ impl<'stmt> Rows<'stmt> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'stmt> Iterator for Rows<'stmt> {
|
impl<'stmt> Iterator for Rows<'stmt> {
|
||||||
type Item = Result<SqliteRow<'stmt>>;
|
type Item = Result<Row<'stmt>>;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Result<SqliteRow<'stmt>>> {
|
fn next(&mut self) -> Option<Result<Row<'stmt>>> {
|
||||||
if self.failed {
|
if self.failed {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
@ -1075,7 +1075,7 @@ impl<'stmt> Iterator for Rows<'stmt> {
|
|||||||
ffi::SQLITE_ROW => {
|
ffi::SQLITE_ROW => {
|
||||||
let current_row = self.current_row.get() + 1;
|
let current_row = self.current_row.get() + 1;
|
||||||
self.current_row.set(current_row);
|
self.current_row.set(current_row);
|
||||||
Some(Ok(SqliteRow {
|
Some(Ok(Row {
|
||||||
stmt: self.stmt,
|
stmt: self.stmt,
|
||||||
current_row: self.current_row.clone(),
|
current_row: self.current_row.clone(),
|
||||||
row_idx: current_row,
|
row_idx: current_row,
|
||||||
@ -1090,17 +1090,20 @@ impl<'stmt> Iterator for Rows<'stmt> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Old name for `Row`. `SqliteRow` is deprecated.
|
||||||
|
pub type SqliteRow<'stmt> = Row<'stmt>;
|
||||||
|
|
||||||
/// A single result row of a query.
|
/// A single result row of a query.
|
||||||
pub struct SqliteRow<'stmt> {
|
pub struct Row<'stmt> {
|
||||||
stmt: &'stmt Statement<'stmt>,
|
stmt: &'stmt Statement<'stmt>,
|
||||||
current_row: Rc<Cell<c_int>>,
|
current_row: Rc<Cell<c_int>>,
|
||||||
row_idx: c_int,
|
row_idx: c_int,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'stmt> SqliteRow<'stmt> {
|
impl<'stmt> Row<'stmt> {
|
||||||
/// Get the value of a particular column of the result row.
|
/// Get the value of a particular column of the result row.
|
||||||
///
|
///
|
||||||
/// Note that `SqliteRow` can panic at runtime if you use it incorrectly. When you are
|
/// Note that `Row` can panic at runtime if you use it incorrectly. When you are
|
||||||
/// retrieving the rows of a query, a row becomes stale once you have requested the next row,
|
/// retrieving the rows of a query, a row becomes stale once you have requested the next row,
|
||||||
/// and the values can no longer be retrieved. In general (when using looping over the rows,
|
/// and the values can no longer be retrieved. In general (when using looping over the rows,
|
||||||
/// for example) this isn't an issue, but it means you cannot do something like this:
|
/// for example) this isn't an issue, but it means you cannot do something like this:
|
||||||
|
@ -2,7 +2,7 @@ use libc::c_int;
|
|||||||
|
|
||||||
use super::ffi;
|
use super::ffi;
|
||||||
|
|
||||||
use {Result, Error, Connection, Statement, Rows, SqliteRow, str_to_cstring};
|
use {Result, Error, Connection, Statement, Rows, Row, str_to_cstring};
|
||||||
use types::ToSql;
|
use types::ToSql;
|
||||||
|
|
||||||
impl Connection {
|
impl Connection {
|
||||||
@ -42,7 +42,7 @@ impl Connection {
|
|||||||
params: &[(&str, &ToSql)],
|
params: &[(&str, &ToSql)],
|
||||||
f: F)
|
f: F)
|
||||||
-> Result<T>
|
-> Result<T>
|
||||||
where F: FnOnce(SqliteRow) -> T
|
where F: FnOnce(Row) -> T
|
||||||
{
|
{
|
||||||
let mut stmt = try!(self.prepare(sql));
|
let mut stmt = try!(self.prepare(sql));
|
||||||
let mut rows = try!(stmt.query_named(params));
|
let mut rows = try!(stmt.query_named(params));
|
||||||
|
Loading…
Reference in New Issue
Block a user