geekorm_core/queries/
query.rs

1/// The Query struct to hold the query and values to use
2use std::fmt::Display;
3
4use crate::builder::models::QueryType;
5use crate::queries::QueryBuilder;
6use crate::{Table, builder::values::Values};
7
8/// The built Query struct with the query and values to use
9#[derive(Debug, Clone, Default)]
10pub struct Query {
11    /// The type of query (select, insert, update, delete)
12    pub query_type: QueryType,
13    /// The resulting SQLite Query
14    pub query: String,
15    /// The values to use in the query (where / insert / update)
16    pub values: Values,
17    /// List of parameters for the query (update / insert)
18    pub parameters: Values,
19
20    /// The output columns for the query (used in raw queries)
21    pub columns: Vec<String>,
22
23    pub(crate) table: Table,
24}
25
26impl Query {
27    /// Create a new Query
28    pub fn new(
29        query_type: QueryType,
30        query: String,
31        values: Values,
32        parameters: Values,
33        columns: Vec<String>,
34        table: Table,
35    ) -> Self {
36        Query {
37            query_type,
38            query,
39            values,
40            parameters,
41            columns,
42            table,
43        }
44    }
45
46    /// Initialize using the QueryBuilder struct
47    pub fn init() -> QueryBuilder {
48        QueryBuilder::default()
49    }
50
51    /// Batch query
52    pub fn batch(statement: impl Into<String>) -> Self {
53        Query::new(
54            QueryType::Batch,
55            statement.into(),
56            Values::default(),
57            Values::default(),
58            vec![],
59            Table::default(),
60        )
61    }
62
63    /// Get the query as a &str
64    pub fn to_str(&self) -> &str {
65        &self.query
66    }
67}
68
69impl Display for Query {
70    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
71        write!(f, "{}", self.query)
72    }
73}