pub struct Lazy<'transaction, T: Table> { /* private fields */ }Expand description
Lazy can be used to read any column of a table row and its parents. Columns are loaded on demand, one row at at time.
As an example, if you have two tables Post and User:
fn foo(post: Lazy<Post>) {
let user = &post.author; // If the `post` row was not retrieved yet, then it is retrieved now to read the `user` column.
let user_id = user.table_row(); // This doesn't access the database because the `user` id was already read from the `post` row.
let user_name = &user.name; // If the `user` row was not retrieved yet, then it is retrieved now to read the `name` column.
}Note that Lazy borrows the transaction immutably. This means that it is not possible to keep a Lazy value when doing inserts or updates. Here are some alternatives to solve this problem:
- Copy/Clone the columns that you need from the Lazy value before doing inserts and or updates.
- Another option is to use Lazy::table_row to retrieve an owned TableRow. This can then be used to create crate::Expr referencing the table columns for use in queries.
- If you need many columns in a struct, then consider crate::FromExpr.
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl<'transaction, T> !Freeze for Lazy<'transaction, T>
impl<'transaction, T> !RefUnwindSafe for Lazy<'transaction, T>
impl<'transaction, T> !Send for Lazy<'transaction, T>
impl<'transaction, T> !Sync for Lazy<'transaction, T>
impl<'transaction, T> Unpin for Lazy<'transaction, T>where
T: Unpin,
impl<'transaction, T> UnwindSafe for Lazy<'transaction, T>where
T: UnwindSafe,
<T as Table>::Schema: RefUnwindSafe,
<T as Table>::Lazy<'transaction>: UnwindSafe,
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
Mutably borrows from an owned value. Read more