@@ -11,14 +11,16 @@ pub struct PlantUmlDefaultGenerator<'a> {
1111
1212static PUML_TEMPLATE : & str = "@startuml\n \n \
1313 hide circle\n \
14+ hide empty members\n \
1415 skinparam linetype ortho\n \n \
1516 {puml_lib}\n \n \
1617 {{ for ent in entities}}{ent}\n {{ endfor }}\n \
1718 {{ for view in views}}{view}\n {{ endfor }}\n \
1819 {{ for fk in foreign_keys}}{fk}\n {{ endfor }}\n \
1920 {{ for e in enums}}{e}\n {{ endfor }}{legend}\n @enduml";
2021
21- static ENTITY_TEMPLATE : & str = "table({name}) \\ {\n {pks} ---\n {fks}{nns}{others}}\n " ;
22+ static ENTITY_TEMPLATE : & str =
23+ "table({name}) \\ {\n {pks} {{ if pks }} ---\n {{ endif }}{fks}{nns}{others}}\n " ;
2224
2325static VIEW_TEMPLATE : & str =
2426 "view({name}{{ if materialized}}, $materialized=true{{ endif }}) \\ {\n {columns}}\n " ;
@@ -154,7 +156,7 @@ impl<'a> PlantUmlDefaultGenerator<'a> {
154156 others,
155157 }
156158 }
157- fn entity_render ( & self , tbl : & Table ) -> Result < String , crate :: SqlantError > {
159+ fn entity_render ( & self , tbl : & Table , conceptual : bool ) -> Result < String , crate :: SqlantError > {
158160 let sorted_columns = Self :: sort_columns ( & tbl. columns ) ;
159161
160162 let columns_render = |columns : Vec < Arc < TableColumn > > | -> Result < String , _ > {
@@ -178,19 +180,28 @@ impl<'a> PlantUmlDefaultGenerator<'a> {
178180 } ,
179181 ) ?)
180182 } ;
183+
184+ let columns_render_if_not_conceptual =
185+ |columns : Vec < Arc < TableColumn > > | -> Result < String , _ > {
186+ if !conceptual {
187+ return columns_render ( columns) ;
188+ }
189+ Ok ( String :: default ( ) )
190+ } ;
191+
181192 Ok ( self . str_templates . render (
182193 "ent" ,
183194 & SEntity {
184- pks : columns_render ( sorted_columns. pks ) ?,
185- fks : columns_render ( sorted_columns. fks ) ?,
186- nns : columns_render ( sorted_columns. nns ) ?,
187- others : columns_render ( sorted_columns. others ) ?,
195+ pks : columns_render_if_not_conceptual ( sorted_columns. pks ) ?,
196+ fks : columns_render_if_not_conceptual ( sorted_columns. fks ) ?,
197+ nns : columns_render_if_not_conceptual ( sorted_columns. nns ) ?,
198+ others : columns_render_if_not_conceptual ( sorted_columns. others ) ?,
188199 name : tbl. name . clone ( ) ,
189200 } ,
190201 ) ?)
191202 }
192203
193- fn view_render ( & self , view : & View ) -> Result < String , crate :: SqlantError > {
204+ fn view_render ( & self , view : & View , conceptual : bool ) -> Result < String , crate :: SqlantError > {
194205 let columns_render = |columns : Vec < Arc < TableColumn > > | -> Result < String , _ > {
195206 Ok :: < std:: string:: String , crate :: SqlantError > ( columns. iter ( ) . try_fold (
196207 String :: new ( ) ,
@@ -212,10 +223,18 @@ impl<'a> PlantUmlDefaultGenerator<'a> {
212223 } ,
213224 ) ?)
214225 } ;
226+ let columns_render_if_not_conceptual =
227+ |columns : Vec < Arc < TableColumn > > | -> Result < String , _ > {
228+ if !conceptual {
229+ return columns_render ( columns) ;
230+ }
231+ Ok ( String :: default ( ) )
232+ } ;
233+
215234 Ok ( self . str_templates . render (
216235 "view" ,
217236 & SView {
218- columns : columns_render ( view. columns . clone ( ) ) ?,
237+ columns : columns_render_if_not_conceptual ( view. columns . clone ( ) ) ?,
219238 name : view. name . clone ( ) ,
220239 materialized : view. materialized ,
221240 } ,
@@ -232,12 +251,12 @@ impl ViewGenerator for PlantUmlDefaultGenerator<'_> {
232251 let entities: Vec < String > = sql_erd
233252 . tables
234253 . iter ( )
235- . map ( |tbl| self . entity_render ( tbl) )
254+ . map ( |tbl| self . entity_render ( tbl, opts . conceptual_diagram ) )
236255 . collect :: < Result < Vec < String > , crate :: SqlantError > > ( ) ?;
237256 let views: Vec < String > = sql_erd
238257 . views
239258 . iter ( )
240- . map ( |view| self . view_render ( view) )
259+ . map ( |view| self . view_render ( view, opts . conceptual_diagram ) )
241260 . collect :: < Result < Vec < String > , crate :: SqlantError > > ( ) ?;
242261
243262 let foreign_keys: Vec < String > = sql_erd
0 commit comments