schema_sql_generator/common/
function_generator.rs1use 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}