Simplify the example

This commit is contained in:
Ivan Ukhov 2015-08-03 17:23:22 -04:00
parent 2091c9843c
commit ef9793a303
2 changed files with 42 additions and 82 deletions

View File

@ -6,7 +6,7 @@ The package provides an interface to [SQLite][1].
## Example ## Example
Create a table, insert a couple of rows, and fetch one: Open a connection, create a table, and insert a couple of rows:
```rust ```rust
let connection = sqlite::open(":memory:").unwrap(); let connection = sqlite::open(":memory:").unwrap();
@ -16,7 +16,11 @@ connection.execute("
INSERT INTO users (name, age) VALUES ('Alice', 42); INSERT INTO users (name, age) VALUES ('Alice', 42);
INSERT INTO users (name, age) VALUES ('Bob', 69); INSERT INTO users (name, age) VALUES ('Bob', 69);
").unwrap(); ").unwrap();
```
Select a row from the table:
```rust
connection.iterate("SELECT * FROM users WHERE age > 50", |pairs| { connection.iterate("SELECT * FROM users WHERE age > 50", |pairs| {
for &(column, value) in pairs.iter() { for &(column, value) in pairs.iter() {
println!("{} = {}", column, value.unwrap()); println!("{} = {}", column, value.unwrap());
@ -25,34 +29,16 @@ connection.iterate("SELECT * FROM users WHERE age > 50", |pairs| {
}).unwrap(); }).unwrap();
``` ```
The same example using prepared statements: The same query using a prepared statement:
```rust ```rust
use sqlite::State; use sqlite::State;
let connection = sqlite::open(":memory:").unwrap();
connection.execute("
CREATE TABLE users (name TEXT, age INTEGER)
").unwrap();
let mut statement = connection.prepare(" let mut statement = connection.prepare("
INSERT INTO users (name, age) VALUES (?, ?) SELECT * FROM users WHERE age > ?
").unwrap(); ").unwrap();
statement.bind(1, "Alice").unwrap(); statement.bind(1, 50).unwrap();
statement.bind(2, 42).unwrap();
assert_eq!(statement.next().unwrap(), State::Done);
statement.reset().unwrap();
statement.bind(1, "Bob").unwrap();
statement.bind(2, 69).unwrap();
assert_eq!(statement.next().unwrap(), State::Done);
let mut statement = connection.prepare("
SELECT * FROM users WHERE age > 50
").unwrap();
while let State::Row = statement.next().unwrap() { while let State::Row = statement.next().unwrap() {
println!("name = {}", statement.read::<String>(0).unwrap()); println!("name = {}", statement.read::<String>(0).unwrap());
@ -60,32 +46,17 @@ while let State::Row = statement.next().unwrap() {
} }
``` ```
The same example using cursors: The same query example using a cursor, which is a wrapper over a prepared
statement:
```rust ```rust
use sqlite::Value; use sqlite::Value;
let connection = sqlite::open(":memory:").unwrap();
connection.execute("
CREATE TABLE users (name TEXT, age INTEGER)
").unwrap();
let mut cursor = connection.prepare(" let mut cursor = connection.prepare("
INSERT INTO users (name, age) VALUES (?, ?) SELECT * FROM users WHERE age > ?
").unwrap().cursor().unwrap(); ").unwrap().cursor().unwrap();
cursor.bind(&[ cursor.bind(&[Value::Integer(50)]).unwrap();
Value::String("Alice".to_string()), Value::Integer(42),
]).unwrap();
cursor.bind(&[
Value::String("Bob".to_string()), Value::Integer(69),
]).unwrap();
let mut cursor = connection.prepare("
SELECT * FROM users WHERE age > 50
").unwrap().cursor().unwrap();
while let Some(row) = cursor.next().unwrap() { while let Some(row) = cursor.next().unwrap() {
match (&row[0], &row[1]) { match (&row[0], &row[1]) {

View File

@ -2,7 +2,7 @@
//! //!
//! ## Example //! ## Example
//! //!
//! Create a table, insert a couple of rows, and fetch one: //! Open a connection, create a table, and insert a couple of rows:
//! //!
//! ``` //! ```
//! let connection = sqlite::open(":memory:").unwrap(); //! let connection = sqlite::open(":memory:").unwrap();
@ -12,7 +12,17 @@
//! INSERT INTO users (name, age) VALUES ('Alice', 42); //! INSERT INTO users (name, age) VALUES ('Alice', 42);
//! INSERT INTO users (name, age) VALUES ('Bob', 69); //! INSERT INTO users (name, age) VALUES ('Bob', 69);
//! ").unwrap(); //! ").unwrap();
//! ```
//! //!
//! Select a row from the table:
//!
//! ```
//! # let connection = sqlite::open(":memory:").unwrap();
//! # connection.execute("
//! # CREATE TABLE users (name TEXT, age INTEGER);
//! # INSERT INTO users (name, age) VALUES ('Alice', 42);
//! # INSERT INTO users (name, age) VALUES ('Bob', 69);
//! # ").unwrap();
//! connection.iterate("SELECT * FROM users WHERE age > 50", |pairs| { //! connection.iterate("SELECT * FROM users WHERE age > 50", |pairs| {
//! for &(column, value) in pairs.iter() { //! for &(column, value) in pairs.iter() {
//! println!("{} = {}", column, value.unwrap()); //! println!("{} = {}", column, value.unwrap());
@ -21,34 +31,22 @@
//! }).unwrap(); //! }).unwrap();
//! ``` //! ```
//! //!
//! The same example using prepared statements: //! The same query using a prepared statement:
//! //!
//! ``` //! ```
//! use sqlite::State; //! use sqlite::State;
//! //! # let connection = sqlite::open(":memory:").unwrap();
//! let connection = sqlite::open(":memory:").unwrap(); //! # connection.execute("
//! //! # CREATE TABLE users (name TEXT, age INTEGER);
//! connection.execute(" //! # INSERT INTO users (name, age) VALUES ('Alice', 42);
//! CREATE TABLE users (name TEXT, age INTEGER) //! # INSERT INTO users (name, age) VALUES ('Bob', 69);
//! ").unwrap(); //! # ").unwrap();
//! //!
//! let mut statement = connection.prepare(" //! let mut statement = connection.prepare("
//! INSERT INTO users (name, age) VALUES (?, ?) //! SELECT * FROM users WHERE age > ?
//! ").unwrap(); //! ").unwrap();
//! //!
//! statement.bind(1, "Alice").unwrap(); //! statement.bind(1, 50).unwrap();
//! statement.bind(2, 42).unwrap();
//! assert_eq!(statement.next().unwrap(), State::Done);
//!
//! statement.reset().unwrap();
//!
//! statement.bind(1, "Bob").unwrap();
//! statement.bind(2, 69).unwrap();
//! assert_eq!(statement.next().unwrap(), State::Done);
//!
//! let mut statement = connection.prepare("
//! SELECT * FROM users WHERE age > 50
//! ").unwrap();
//! //!
//! while let State::Row = statement.next().unwrap() { //! while let State::Row = statement.next().unwrap() {
//! println!("name = {}", statement.read::<String>(0).unwrap()); //! println!("name = {}", statement.read::<String>(0).unwrap());
@ -56,32 +54,23 @@
//! } //! }
//! ``` //! ```
//! //!
//! The same example using cursors: //! The same query example using a cursor, which is a wrapper over a prepared
//! statement:
//! //!
//! ``` //! ```
//! use sqlite::Value; //! use sqlite::Value;
//! //! # let connection = sqlite::open(":memory:").unwrap();
//! let connection = sqlite::open(":memory:").unwrap(); //! # connection.execute("
//! //! # CREATE TABLE users (name TEXT, age INTEGER);
//! connection.execute(" //! # INSERT INTO users (name, age) VALUES ('Alice', 42);
//! CREATE TABLE users (name TEXT, age INTEGER) //! # INSERT INTO users (name, age) VALUES ('Bob', 69);
//! ").unwrap(); //! # ").unwrap();
//! //!
//! let mut cursor = connection.prepare(" //! let mut cursor = connection.prepare("
//! INSERT INTO users (name, age) VALUES (?, ?) //! SELECT * FROM users WHERE age > ?
//! ").unwrap().cursor().unwrap(); //! ").unwrap().cursor().unwrap();
//! //!
//! cursor.bind(&[ //! cursor.bind(&[Value::Integer(50)]).unwrap();
//! Value::String("Alice".to_string()), Value::Integer(42),
//! ]).unwrap();
//!
//! cursor.bind(&[
//! Value::String("Bob".to_string()), Value::Integer(69),
//! ]).unwrap();
//!
//! let mut cursor = connection.prepare("
//! SELECT * FROM users WHERE age > 50
//! ").unwrap().cursor().unwrap();
//! //!
//! while let Some(row) = cursor.next().unwrap() { //! while let Some(row) = cursor.next().unwrap() {
//! match (&row[0], &row[1]) { //! match (&row[0], &row[1]) {