Skip to main content

schema_sql_generator/common/
function_generator.rs

1use crate::common::generator_context::GeneratorContext;
2use crate::common::sql_writer::SqlWriter;
3use schema_model::model::function::Function;
4
5pub trait FunctionGenerator {
6    fn output_functions(&self);
7    fn output_function(
8        &self,
9        writer: &mut SqlWriter,
10        statement_separator: &str,
11        function: &Function,
12    );
13
14}
15
16pub struct DefaultFunctionGenerator {
17    context: GeneratorContext,
18}
19
20impl DefaultFunctionGenerator {
21    pub fn new(context: GeneratorContext) -> Self {
22        Self {
23            context,
24        }
25    }
26
27    pub fn context(&self) -> &GeneratorContext {
28        &self.context
29    }
30}
31
32impl FunctionGenerator for DefaultFunctionGenerator {
33    fn output_functions(&self) {
34        let database_type = self.context.settings().database_type();
35        let statement_separator = self.context.settings().statement_separator();
36        let database_model = self.context.settings().database_model();
37
38        self.context.with_writer(|writer| {
39            database_model.schemas().iter().for_each(|schema| {
40                schema
41                    .functions()
42                    .iter()
43                    .filter(|function| function.database_type() == database_type)
44                    .for_each(|function| {
45                        self.output_function(writer, statement_separator, function);
46                    })
47            });
48        });
49    }
50
51    fn output_function(&self, writer: &mut SqlWriter, statement_separator: &str, function: &Function) {
52        writer.print(function.sql());
53        writer.println(statement_separator);
54        writer.newline();
55    }
56}