#[derive(SelectQuery)]
{
    // Attributes available to this derive:
    #[meta]
    #[result]
    #[filter]
    #[filters]
    #[options]
}
Expand description

SelectQuery 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_protocol::codec::EnumValue;
 use edgedb_query::{*, ToEdgeShape, models::{ edge_query::*, query_result::BasicResult}};
 use edgedb_query::queries::{select::{OrderDir, OrderOptions, SelectOptions} , filter::Filter};

 #[derive(SelectQuery)]
 pub struct FindMajorUsersWithOptions {
     #[meta(module = "users", table = "User")]
     #[result(type = "UserResult")]
     __meta__: (),

     #[options]
     options: SelectOptions<'static>,

     #[filter(operator = "GreaterThanOrEqual")]
     pub age: i8,
 }

 #[derive(Default, EdgedbResult)]
 pub struct UserResult {
     pub id: String,
     pub name: String,
 }

 fn main() {
    let q = FindMajorUsersWithOptions {
            __meta__ : (),
            options: SelectOptions {
                table_name: "User",
                module: Some("users"),
                order_options: Some(OrderOptions {
                    order_by: "name".to_string(),
                    order_direction: Some(OrderDir::Desc)
                }),
                page_options: None
            },
            age: 18
        };

        let edge_query : EdgeQuery = q.to_edge_query();

        let expected = "select users::User {id,name,age} filter users::User.age >= (select <int16>$age) order by users::User.name desc";

        assert_eq!(edge_query.query, expected);

        if let Some(Value::Object { shape, fields }) = edge_query.args {
            crate::test_utils::check_shape(&shape, vec!["age"]);
            assert_eq!(fields, vec![
                Some(Value::Int16(q.age as i16))
            ])
        } else {
            assert!(false)
        }
 }