schema_sql_generator/common/
other_sql_generator.rs1use crate::common::generator_context::GeneratorContext;
2use crate::common::sql_writer::SqlWriter;
3use schema_model::model::types::OtherSqlOrder;
4
5pub trait OtherSqlGenerator {
6 fn output_other_sql_top(&self);
7 fn output_other_sql_bottom(&self);
8 fn output_other_sql(&self, writer: &mut SqlWriter, statement_separator: &str, sql: &str);
9}
10
11pub struct DefaultOtherSqlGenerator {
12 context: GeneratorContext,
13}
14
15impl DefaultOtherSqlGenerator {
16 pub fn new(context: GeneratorContext) -> Self {
17 Self { context }
18 }
19
20 pub fn context(&self) -> &GeneratorContext {
21 &self.context
22 }
23}
24
25impl OtherSqlGenerator for DefaultOtherSqlGenerator {
26 fn output_other_sql_top(&self) {
27 let database_type = self.context.settings().database_type();
28 let statement_separator = self.context.settings().statement_separator();
29 let database_model = self.context.settings().database_model();
30
31 self.context.with_writer(|writer| {
32 database_model.schemas().iter().for_each(|schema| {
33 schema
34 .other_sql()
35 .iter()
36 .filter(|sql| sql.database_type() == database_type)
37 .filter(|sql| sql.order() == OtherSqlOrder::Top)
38 .filter(|sql| !sql.sql().is_empty())
39 .for_each(|sql| {
40 self.output_other_sql(writer, statement_separator, sql.sql());
41 })
42 });
43 });
44 }
45
46 fn output_other_sql_bottom(&self) {
47 let database_type = self.context.settings().database_type();
48 let statement_separator = self.context.settings().statement_separator();
49 let database_model = self.context.settings().database_model();
50
51 self.context.with_writer(|writer| {
52 database_model.schemas().iter().for_each(|schema| {
53 schema
54 .other_sql()
55 .iter()
56 .filter(|sql| sql.database_type() == database_type)
57 .filter(|sql| sql.order() == OtherSqlOrder::Bottom)
58 .filter(|sql| !sql.sql().is_empty())
59 .for_each(|sql| {
60 self.output_other_sql(writer, statement_separator, sql.sql());
61 })
62 });
63 });
64 }
65
66 fn output_other_sql(&self, writer: &mut SqlWriter, statement_separator: &str, sql: &str) {
67 writer.print(sql);
68 writer.println(statement_separator);
69 writer.newline();
70 }
71}