geekorm_core/queries/
query.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/// The Query struct to hold the query and values to use
use std::fmt::Display;

use crate::builder::models::QueryType;
use crate::queries::QueryBuilder;
use crate::{builder::values::Values, Table};

/// The built Query struct with the query and values to use
#[derive(Debug, Clone, Default)]
pub struct Query {
    /// The type of query (select, insert, update, delete)
    pub query_type: QueryType,
    /// The resulting SQLite Query
    pub query: String,
    /// The values to use in the query (where / insert / update)
    pub values: Values,
    /// List of parameters for the query (update / insert)
    pub parameters: Values,

    /// The output columns for the query (used in raw queries)
    pub columns: Vec<String>,

    pub(crate) table: Table,
}

impl Query {
    /// Create a new Query
    pub fn new(
        query_type: QueryType,
        query: String,
        values: Values,
        parameters: Values,
        columns: Vec<String>,
        table: Table,
    ) -> Self {
        Query {
            query_type,
            query,
            values,
            parameters,
            columns,
            table,
        }
    }

    /// Initialize using the QueryBuilder struct
    pub fn init() -> QueryBuilder {
        QueryBuilder::default()
    }

    /// Get the query as a &str
    pub fn to_str(&self) -> &str {
        &self.query
    }
}

impl Display for Query {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.query)
    }
}