schema_model/builder/
schema.rs1use crate::model::enum_type::EnumType;
2use crate::model::function::Function;
3use crate::model::other_sql::OtherSql;
4use crate::model::procedure::Procedure;
5use crate::model::schema::Schema;
6use crate::model::table::Table;
7use crate::model::view::View;
8
9#[derive(Debug, Default)]
11pub struct SchemaBuilder {
12 schema: Schema,
13}
14
15impl SchemaBuilder {
16 pub fn new<S: Into<String>>(schema_name: Option<S>) -> Self {
17 Self {
18 schema: Schema::new(schema_name.map(|s| s.into())),
19 }
20 }
21
22 pub fn add_table(mut self, table: Table) -> Self {
24 self.schema.add_table(table);
25 self
26 }
27 pub fn add_view(mut self, view: View) -> Self {
29 self.schema.add_view(view);
30 self
31 }
32 pub fn add_enum_type(mut self, enum_type: EnumType) -> Self {
34 self.schema.add_enum_type(enum_type);
35 self
36 }
37 pub fn add_functions(mut self, functions: Vec<Function>) -> Self {
39 self.schema.add_functions(functions);
40 self
41 }
42 pub fn add_procedures(mut self, procedures: Vec<Procedure>) -> Self {
44 self.schema.add_procedures(procedures);
45 self
46 }
47 pub fn add_other_sql(mut self, other_sql: OtherSql) -> Self {
49 self.schema.add_other_sql(other_sql);
50 self
51 }
52
53 pub fn case_sensitive_text(mut self, value: bool) -> Self {
54 self.schema.set_case_sensitive_text(value);
55 self
56 }
57
58 pub fn build(self) -> Schema {
60 self.schema
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use super::*;
67 use crate::builder::{ColumnBuilder, KeyBuilder, TableBuilder};
68 use crate::model::column_type::ColumnType;
69 use crate::model::types::KeyType;
70
71 #[test]
72 fn build_schema_with_table_and_pk() {
73 let table = TableBuilder::new(None, "users")
74 .add_column(
75 ColumnBuilder::new(None, "id", ColumnType::Int)
76 .required(true)
77 .build(),
78 )
79 .add_column(ColumnBuilder::new(None, "name", ColumnType::Varchar).build())
80 .add_key(KeyBuilder::new(KeyType::Primary).add_column("id").build())
81 .build();
82
83 let schema = SchemaBuilder::new(None::<&str>).add_table(table).build();
84
85 assert_eq!(schema.tables().len(), 1);
86 assert_eq!(schema.tables()[0].name(), "users");
87 }
88}