use edgedb_protocol::common::Cardinality;
use crate::ToEdgeQl;
use crate::ToEdgeValue;
use edgedb_protocol::value::Value;
#[derive(Debug)]
pub struct EdgeQuery {
pub query: String,
pub args: Option<Value>,
pub cardinality: Cardinality
}
impl EdgeQuery {
fn with_cardinality(self, cardinality: Cardinality) -> Self {
let query = match cardinality {
Cardinality::AtMostOne | Cardinality::One => {
format!("SELECT ({}) limit 1", self.query)
}
_ => {
self.query
}
};
Self {
query,
args: self.args,
cardinality
}
}
}
pub trait ToEdgeQuery: ToEdgeQl + ToEdgeValue {
fn to_edge_query(&self) -> EdgeQuery {
EdgeQuery {
query: self.to_edgeql().to_string(),
args: Some(self.to_edge_value()),
cardinality: Cardinality::Many
}
}
fn to_edge_query_with_cardinality(&self, cardinality: Cardinality) -> EdgeQuery {
self.to_edge_query().with_cardinality(cardinality)
}
}