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