Connection

Struct Connection 

Source
pub struct Connection { /* private fields */ }
Expand description

An open connection to a SQLite database.

§Examples

Load a set of rows from the default SQLite database, and iterate over them.

use spin_sdk::sqlite::{Connection, Value};

let db = Connection::open_default()?;

let query_result = db.execute(
    "SELECT * FROM users WHERE age >= ?",
    &[Value::Integer(min_age)]
)?;

let name_index = query_result.columns.iter().position(|c| c == "name").unwrap();

for row in &query_result.rows {
    let name: &str = row.get(name_index).unwrap();
    println!("Found user {name}");
}

Use the QueryResult::rows() wrapper to access a column by name. This is simpler and more readable but incurs a lookup on each access, so is not recommended when iterating a data set.

let db = Connection::open_default()?;
let query_result = db.execute(
    "SELECT * FROM users WHERE id = ?",
    &[Value::Integer(user_id)]
)?;
let name = query_result.rows().next().and_then(|r| r.get::<&str>("name")).unwrap();

Perform an aggregate (scalar) operation over a named SQLite database. The result set contains a single column, with a single row.

use spin_sdk::sqlite::Connection;

let db = Connection::open("customer-data")?;
let query_result = db.execute("SELECT COUNT(*) FROM users", &[])?;
let count = query_result.rows.first().and_then(|r| r.get::<usize>(0)).unwrap();

Delete rows from a SQLite database. The usual Connection::execute() syntax is used but the query result is always empty.

use spin_sdk::sqlite::{Connection, Value};

let db = Connection::open("customer-data")?;
db.execute("DELETE FROM users WHERE age < ?", &[Value::Integer(min_age)])?;

A handle to an open sqlite instance

Implementations§

Source§

impl Connection

Source

pub fn open_default() -> Result<Self, Error>

Open a connection to the default database

Source§

impl Connection

Source

pub fn open(database: &str) -> Result<Connection, Error>

Open a connection to a named database instance.

If database is “default”, the default instance is opened.

error::no-such-database will be raised if the name is not recognized.

Source§

impl Connection

Source

pub fn execute( &self, statement: &str, parameters: &[Value], ) -> Result<QueryResult, Error>

Execute a statement returning back data if there is any

Source§

impl Connection

Source

pub fn last_insert_rowid(&self) -> i64

The SQLite rowid of the most recent successful INSERT on the connection, or 0 if there has not yet been an INSERT on the connection.

Source§

impl Connection

Source

pub fn changes(&self) -> u64

The number of rows modified, inserted or deleted by the most recently completed INSERT, UPDATE or DELETE statement on the connection.

Trait Implementations§

Source§

impl Debug for Connection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V