Skip to main content

schema_sql_generator/common/
procedure_generator.rs

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