elefant_tools/models/
timescale_db_user_defined_job.rs

1use crate::object_id::ObjectId;
2use crate::pg_interval::Interval;
3use crate::quoting::AttemptedKeywordUsage::TypeOrFunctionName;
4use crate::quoting::{quote_value_string, IdentifierQuoter, Quotable};
5use crate::whitespace_ignorant_string::WhitespaceIgnorantString;
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
9pub struct TimescaleDbUserDefinedJob {
10    pub function_name: String,
11    pub function_schema: String,
12    pub schedule_interval: Interval,
13    pub config: Option<WhitespaceIgnorantString>,
14    pub scheduled: bool,
15    pub check_config_name: Option<String>,
16    pub check_config_schema: Option<String>,
17    pub fixed_schedule: bool,
18    pub object_id: ObjectId,
19}
20
21impl Default for TimescaleDbUserDefinedJob {
22    fn default() -> Self {
23        TimescaleDbUserDefinedJob {
24            function_name: String::new(),
25            function_schema: String::new(),
26            schedule_interval: Interval::new(0, 1, 0),
27            config: None,
28            scheduled: false,
29            check_config_name: None,
30            check_config_schema: None,
31            fixed_schedule: false,
32            object_id: ObjectId::default(),
33        }
34    }
35}
36
37impl TimescaleDbUserDefinedJob {
38    pub fn get_create_sql(&self, identifier_quoter: &IdentifierQuoter) -> String {
39        let mut sql = "select add_job('".to_string();
40        sql.push_str(
41            &self
42                .function_schema
43                .quote(identifier_quoter, TypeOrFunctionName),
44        );
45        sql.push('.');
46        sql.push_str(
47            &self
48                .function_name
49                .quote(identifier_quoter, TypeOrFunctionName),
50        );
51        sql.push_str("', interval '");
52        sql.push_str(&self.schedule_interval.to_postgres());
53        sql.push('\'');
54
55        if let Some(config) = &self.config {
56            sql.push_str(", config => ");
57            sql.push_str(&quote_value_string(config));
58        }
59
60        if !self.scheduled {
61            sql.push_str(", scheduled => false");
62        }
63
64        if let (Some(check_config_name), Some(check_config_schema)) =
65            (&self.check_config_name, &self.check_config_schema)
66        {
67            sql.push_str(", check_config => '");
68            sql.push_str(&check_config_schema.quote(identifier_quoter, TypeOrFunctionName));
69            sql.push('.');
70            sql.push_str(&check_config_name.quote(identifier_quoter, TypeOrFunctionName));
71            sql.push('\'');
72        }
73
74        if !self.fixed_schedule {
75            sql.push_str(", fixed_schedule => false");
76        }
77
78        sql.push_str(");");
79
80        sql
81    }
82}