Rows

Struct Rows 

Source
pub struct Rows<'stmt> { /* private fields */ }
Expand description

An handle for the resulting rows of a query.

Implementations§

Source§

impl<'stmt> Rows<'stmt>

Source

pub fn next(&mut self) -> Result<Option<&Row<'stmt>>>

Attempt to get the next row from the query. Returns Ok(Some(Row)) if there is another row, Err(...) if there was an error getting the next row, and Ok(None) if all rows have been retrieved.

§Note

This interface is not compatible with Rust’s Iterator trait, because the lifetime of the returned row is tied to the lifetime of self. This is a fallible “streaming iterator”. For a more natural interface, consider using query_map or query_and_then instead, which return types that implement Iterator.

Source

pub fn map<F, B>(self, f: F) -> Map<'stmt, F>
where F: FnMut(&Row<'_>) -> Result<B>,

Map over this Rows, converting it to a Map, which implements FallibleIterator.

Note: This method requires the closure to return duckdb::Result<B>. If you need to use custom error types, consider using and_then instead, which allows any error type that implements From<duckdb::Error>.

use fallible_iterator::FallibleIterator;
fn query(stmt: &mut Statement) -> Result<Vec<i64>> {
    let rows = stmt.query([])?;
    rows.map(|r| r.get(0)).collect()
}
Source

pub fn mapped<F, B>(self, f: F) -> MappedRows<'stmt, F>
where F: FnMut(&Row<'_>) -> Result<B>,

Map over this Rows, converting it to a MappedRows, which implements Iterator.

Source

pub fn and_then<F, T, E>(self, f: F) -> AndThenRows<'stmt, F>
where F: FnMut(&Row<'_>) -> Result<T, E>,

Map over this Rows with a fallible function, converting it to a AndThenRows, which implements Iterator (instead of FallibleStreamingIterator).

Source

pub fn as_ref(&self) -> Option<&Statement<'stmt>>

Access the underlying statement

This method provides a way to access the Statement that created these Rows without additional borrowing conflicts. This is particularly useful when you need to access statement metadata (like column count or names) while iterating over results.

§Example
fn process_results(conn: &Connection) -> Result<()> {
    let mut stmt = conn.prepare("SELECT id, name FROM people")?;
    let mut rows = stmt.query([])?;

    let column_count = rows.as_ref().unwrap().column_count();
    println!("Processing {} columns", column_count);

    while let Some(row) = rows.next()? {
        // Process row...
    }
    Ok(())
}

Trait Implementations§

Source§

impl<'stmt> FallibleStreamingIterator for Rows<'stmt>

FallibleStreamingIterator differs from the standard library’s Iterator in two ways:

  • each call to next (sqlite3_step) can fail.
  • returned Row is valid until next is called again or Statement is reset or finalized.

While these iterators cannot be used with Rust for loops, while let loops offer a similar level of ergonomics:

fn query(stmt: &mut Statement) -> Result<()> {
    let mut rows = stmt.query([])?;
    while let Some(row) = rows.next()? {
        // scan columns value
    }
    Ok(())
}
Source§

type Error = Error

The error type of iteration.
Source§

type Item = Row<'stmt>

The type being iterated over.
Source§

fn advance(&mut self) -> Result<()>

Advances the iterator to the next position. Read more
Source§

fn get(&self) -> Option<&Row<'stmt>>

Returns the current element. Read more
Source§

fn next(&mut self) -> Result<Option<&Self::Item>, Self::Error>

Advances the iterator, returning the next element. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns bounds on the number of remaining elements in the iterator.
Source§

fn all<F>(&mut self, f: F) -> Result<bool, Self::Error>
where Self: Sized, F: FnMut(&Self::Item) -> bool,

Determines if all elements of the iterator satisfy a predicate.
Source§

fn any<F>(&mut self, f: F) -> Result<bool, Self::Error>
where Self: Sized, F: FnMut(&Self::Item) -> bool,

Determines if any elements of the iterator satisfy a predicate.
Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Borrows an iterator, rather than consuming it. Read more
Source§

fn count(self) -> Result<usize, Self::Error>
where Self: Sized,

Returns the number of remaining elements in the iterator.
Source§

fn filter<F>(self, f: F) -> Filter<Self, F>
where Self: Sized, F: FnMut(&Self::Item) -> bool,

Returns an iterator which filters elements by a predicate.
Source§

fn find<F>(&mut self, f: F) -> Result<Option<&Self::Item>, Self::Error>
where Self: Sized, F: FnMut(&Self::Item) -> bool,

Returns the first element of the iterator which satisfies a predicate.
Source§

fn for_each<F>(self, f: F) -> Result<(), Self::Error>
where Self: Sized, F: FnMut(&Self::Item),

Calls a closure on each element of an iterator.
Source§

fn fuse(self) -> Fuse<Self>
where Self: Sized,

Returns an iterator which is well-behaved at the beginning and end of iteration.
Source§

fn map<F, B>(self, f: F) -> Map<Self, F, B>
where Self: Sized, F: FnMut(&Self::Item) -> B,

Returns an iterator which applies a transform to elements.
Source§

fn map_ref<F, B>(self, f: F) -> MapRef<Self, F>
where Self: Sized, F: Fn(&Self::Item) -> &B, B: ?Sized,

Returns an iterator which applies a transform to elements. Read more
Source§

fn map_err<F, B>(self, f: F) -> MapErr<Self, F>
where Self: Sized, F: Fn(Self::Error) -> B,

Returns an iterator that applies a transform to errors.
Source§

fn nth(&mut self, n: usize) -> Result<Option<&Self::Item>, Self::Error>

Returns the nth element of the iterator.
Source§

fn position<F>(&mut self, f: F) -> Result<Option<usize>, Self::Error>
where Self: Sized, F: FnMut(&Self::Item) -> bool,

Returns the position of the first element matching a predicate.
Source§

fn skip(self, n: usize) -> Skip<Self>
where Self: Sized,

Returns an iterator which skips the first n elements.
Source§

fn skip_while<F>(self, f: F) -> SkipWhile<Self, F>
where Self: Sized, F: FnMut(&Self::Item) -> bool,

Returns an iterator which skips the first sequence of elements matching a predicate.
Source§

fn take(self, n: usize) -> Take<Self>
where Self: Sized,

Returns an iterator which only returns the first n elements.
Source§

fn take_while<F>(self, f: F) -> TakeWhile<Self, F>
where Self: Sized, F: FnMut(&Self::Item) -> bool,

Returns an iterator which only returns the first sequence of elements matching a predicate.

Auto Trait Implementations§

§

impl<'stmt> Freeze for Rows<'stmt>

§

impl<'stmt> !RefUnwindSafe for Rows<'stmt>

§

impl<'stmt> !Send for Rows<'stmt>

§

impl<'stmt> !Sync for Rows<'stmt>

§

impl<'stmt> Unpin for Rows<'stmt>

§

impl<'stmt> !UnwindSafe for Rows<'stmt>

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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

Source§

impl<T> ErasedDestructor for T
where T: 'static,