elefant_tools/models/
timescale_db_user_defined_job.rs1use 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("e_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}