#[derive(Select)]
Expand description
Derive Select to create a new *Select
struct.
This *Select
struct will implement the IntoSelect
trait and can be used with Query::into_vec
or Transaction::query_one
.
Usage can also be nested.
Example:
#[rust_query::migration::schema(Schema)]
pub mod vN {
pub struct Thing {
pub details: Details,
pub beta: f64,
pub seconds: i64,
}
pub struct Details {
pub name: String,
}
}
use v0::*;
use rust_query::{Table, Select, Transaction};
#[derive(Select)]
struct MyData {
seconds: i64,
is_it_real: bool,
name: String,
other: OtherData
}
#[derive(Select)]
struct OtherData {
alpha: f64,
beta: f64,
}
fn do_query(db: &Transaction<Schema>) -> Vec<MyData> {
db.query(|rows| {
let thing = rows.join(Thing);
rows.into_vec(MyDataSelect {
seconds: &thing.seconds,
is_it_real: thing.seconds.lt(100),
name: &thing.details.name,
other: OtherDataSelect {
alpha: thing.beta.add(2.0),
beta: &thing.beta,
},
})
})
}