Derive Macro edgedb_query_derive::UpdateQuery
source · [−]#[derive(UpdateQuery)]
{
// Attributes available to this derive:
#[meta]
#[result]
#[set]
#[filters]
}
Expand description
UpdateQuery creates implementations of following traits for the annotated struct :
- edgedb_query::ToEdgeValue
- edgedb_query::ToEdgeQl
- edgedb_query::ToEdgeScalar
- edgedb_query::models::edge_query::ToEdgeQuery
- ToString
Usage
use edgedb_protocol::value::Value;
use edgedb_query_derive::{EdgedbSet, UpdateQuery, EdgedbFilters};
use edgedb_query::{ToEdgeScalar, ToEdgeQl, ToEdgeValue, queries::filter::Filter, models::edge_query::{ToEdgeQuery}};
use crate::test_utils::check_shape;
#[derive(EdgedbSet)]
pub struct MySet {
pub name: String,
}
#[derive(EdgedbFilters)]
pub struct MyFilter {
#[filter(operator="=", column_name="identity.first_name", wrapper_fn="str_lower")]
pub first_name: String,
#[filter(operator=">=", conjunctive="And")]
pub age: i8,
}
#[derive(UpdateQuery)]
pub struct UpdateUserName {
#[meta(module = "users", table="User")]
__meta__: (),
#[set]
pub set: MySet,
#[filters]
pub filter: MyFilter,
}
pub fn main() {
let q = UpdateUserName {
__meta__: (),
set: MySet {
name: "Joe".to_string()
},
filter: MyFilter {
first_name :"Henri".to_string(),
age : 18
}
};
let eq = q.to_edge_query();
let expected_query = r#"
update users::User
filter str_lower(users::User.identity.first_name) = (select <str>$first_name)
and users::User.age >= (select <int16>$age)
set {
name := (select <str>$name)
}
"#.to_owned().replace("\n", "");
assert_eq!(eq.query.replace(" ", ""), expected_query.replace(" ", ""));
if let Some(Value::Object { shape, fields}) = eq.args {
check_shape(&shape, vec!["first_name", "age", "name"]);
assert_eq!(fields, vec![
Some(Value::Str(q.filter.first_name)),
Some(Value::Int16(q.filter.age as i16)),
Some(Value::Str(q.set.name)),
]);
}
}