oxirs_arq/query/
query_traits.rs1use std::fmt;
12
13use super::types::{Query, QueryType};
14
15impl fmt::Display for Query {
16 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17 match self.query_type {
18 QueryType::Select => {
19 write!(f, "SELECT ")?;
20 if self.distinct {
21 write!(f, "DISTINCT ")?;
22 } else if self.reduced {
23 write!(f, "REDUCED ")?;
24 }
25 if self.select_variables.is_empty() {
26 write!(f, "* ")?;
27 } else {
28 for (i, var) in self.select_variables.iter().enumerate() {
29 if i > 0 {
30 write!(f, " ")?;
31 }
32 write!(f, "?{var}", var = var.as_str())?;
33 }
34 write!(f, " ")?;
35 }
36 write!(f, "WHERE {{ {:?} }}", self.where_clause)?;
37 }
38 QueryType::Construct => {
39 write!(f, "CONSTRUCT {{ ")?;
40 for (i, pattern) in self.construct_template.iter().enumerate() {
41 if i > 0 {
42 write!(f, " . ")?;
43 }
44 write!(f, "{pattern:?}")?;
45 }
46 write!(f, " }} WHERE {{ {:?} }}", self.where_clause)?;
47 }
48 QueryType::Ask => {
49 write!(f, "ASK WHERE {{ {:?} }}", self.where_clause)?;
50 }
51 QueryType::Describe => {
52 write!(f, "DESCRIBE ")?;
53 if self.select_variables.is_empty() {
54 write!(f, "* ")?;
55 } else {
56 for (i, var) in self.select_variables.iter().enumerate() {
57 if i > 0 {
58 write!(f, " ")?;
59 }
60 write!(f, "?{var}", var = var.as_str())?;
61 }
62 write!(f, " ")?;
63 }
64 write!(f, "WHERE {{ {:?} }}", self.where_clause)?;
65 }
66 }
67 if let Some(limit) = self.limit {
68 write!(f, " LIMIT {limit}")?;
69 }
70 if let Some(offset) = self.offset {
71 write!(f, " OFFSET {offset}")?;
72 }
73 Ok(())
74 }
75}