pub struct Row { /* private fields */ }Expand description
A container for a single row within a query result set.
RowIterator::next() yields a Row.
Each Row contains parsed cell values and a reference to the table schema.
§Zero-Copy Struct Mapping via Derive Macros
Define typed structs with #[derive(FromRow)] to convert rows directly into
your domain types using TryFrom<Row> without unnecessary allocations:
#[derive(FromRow, Debug)]
struct UserStats {
name: String,
count: i64,
}
let user: UserStats = row.try_into()?;
println!("{}: {}", user.name, user.count);§Field Extraction by Name or Index
Retrieve individual cell values by column name (&str) or index (usize)
using get() or take():
let name: String = row.get("name")?;
let age: i64 = row.get(1)?;
println!("{name} is {age} years old");Implementations§
Source§impl Row
impl Row
Sourcepub fn get<T: FromSql, I: ColumnIndex>(&self, index: I) -> Result<T, RowError>
pub fn get<T: FromSql, I: ColumnIndex>(&self, index: I) -> Result<T, RowError>
Retrieves a value from the row by column name or zero-based index.
The return type must implement FromSql.
The cell value is cloned from the row data without modifying self. If
you want to take ownership and avoid cloning large values, see
take().
§Example
let msg: String = row.get("msg")?;
println!("Value: {msg}");Sourcepub fn take<T: FromSql, I: ColumnIndex>(
&mut self,
index: I,
) -> Result<T, RowError>
pub fn take<T: FromSql, I: ColumnIndex>( &mut self, index: I, ) -> Result<T, RowError>
Takes ownership of a value from the row by column name or zero-based index.
This method mutates self by extracting the cell value in-place to
avoid cloning. The extracted cell in the row is replaced with NULL.
Subsequent attempts to read or take the column will treat it as NULL
(returning Ok(None) when reading into Option<T>, or returning a
type conversion error for non-nullable types).
take() removes the value from self before converting it to T. If
type conversion fails and returns an error, the original value has
already been consumed and cannot be recovered from the row.
If you are not sure of the column’s type or need to read the value
multiple times, use get() instead of take(). Use take()
when you are confident of the type and want to avoid cloning large values
(such as strings, byte buffers, or nested records).
§Example
let text: String = row.take("big_text")?;
println!("Length: {}", text.len());
// Subsequent reads treat the column as NULL:
assert_eq!(row.get::<Option<String>, _>("big_text")?, None);
// Attempting to read or take again as a non-nullable type fails:
assert!(row.take::<String, _>("big_text").is_err());Trait Implementations§
Auto Trait Implementations§
impl Freeze for Row
impl RefUnwindSafe for Row
impl Send for Row
impl Sync for Row
impl Unpin for Row
impl UnsafeUnpin for Row
impl UnwindSafe for Row
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request