diff --git a/schemacrawler-scripting/src/test/resources/DiagramScriptTest.mermaid.txt b/schemacrawler-scripting/src/test/resources/DiagramScriptTest.mermaid.txt index b27b9f4112..b06446a968 100644 --- a/schemacrawler-scripting/src/test/resources/DiagramScriptTest.mermaid.txt +++ b/schemacrawler-scripting/src/test/resources/DiagramScriptTest.mermaid.txt @@ -1,7 +1,7 @@ erDiagram - PUBLIC-BOOKS-AUTHORS { - INTEGER ID + PUBLICBOOKSAUTHORS { + INTEGER ID PK VARCHAR FIRSTNAME VARCHAR LASTNAME VARCHAR ADDRESS1 @@ -12,96 +12,96 @@ erDiagram VARCHAR COUNTRY } - PUBLIC-BOOKS-BOOKS { - INTEGER ID - VARCHAR TITLE - VARCHAR DESCRIPTION - INTEGER PUBLISHERID - DATE PUBLICATIONDATE - DOUBLE PRICE - INTEGER PREVIOUSEDITIONID + PUBLICBOOKSBOOKS { + INTEGER ID PK "Unique (internal) id for book" + VARCHAR TITLE "Book title" + VARCHAR DESCRIPTION "Book description (Usually the blurb from the book jacket or promotional materials)" + INTEGER PUBLISHERID "Foreign key to the book publisher" + DATE PUBLICATIONDATE "Book publication date" + DOUBLE PRICE "Current price for the book" + INTEGER PREVIOUSEDITIONID FK } - PUBLIC-BOOKS-"Celebrities" { - INTEGER Id + PUBLICBOOKSCelebrities { + INTEGER Id PK VARCHAR NAME } - PUBLIC-BOOKS-COUPONS { - INTEGER ID + PUBLICBOOKSCOUPONS { + INTEGER ID PK CLOB DATA INTEGERARRAY COUPONS - VARCHARARRAY BOOKS + VARCHAR20ARRAY10 BOOKS } - PUBLIC-BOOKS-CUSTOMERDATA { - INTEGER ID - VALID_STRING DATA + PUBLICBOOKSCUSTOMERDATA { + INTEGER ID PK + VALIDSTRING DATA } - PUBLIC-BOOKS-CUSTOMERS { - INTEGER ID - NAME_TYPE FIRSTNAME - NAME_TYPE LASTNAME - AGE_TYPE AGE + PUBLICBOOKSCUSTOMERS { + INTEGER ID PK + NAMETYPE FIRSTNAME + NAMETYPE LASTNAME + AGETYPE AGE } - PUBLIC-BOOKS-PUBLISHERS { - INTEGER ID - VARCHAR PUBLISHER + PUBLICBOOKSPUBLISHERS { + INTEGER ID PK "Unique (internal) id for book publisher" + VARCHAR PUBLISHER "Name of book publisher" } - PUBLIC-"PUBLISHER SALES"-REGIONS { + PUBLICPUBLISHERSALESREGIONS { VARCHAR CITY VARCHAR STATE - VARCHAR POSTALCODE - VARCHAR COUNTRY + VARCHAR POSTALCODE PK + VARCHAR COUNTRY PK } - PUBLIC-"PUBLISHER SALES"-SALESDATA { - INTEGER SALESDATAID + PUBLICPUBLISHERSALESSALESDATA { + INTEGER SALESDATAID UK DOUBLE YEARLYAMOUNT } - PUBLIC-BOOKS-BOOKAUTHORS { - INTEGER BOOKID - INTEGER AUTHORID + PUBLICBOOKSBOOKAUTHORS { + INTEGER BOOKID FK + INTEGER AUTHORID FK VARCHAR SOMEDATA } - PUBLIC-BOOKS-"Celebrity Updates" { - INTEGER Celebrity Id + PUBLICBOOKSCelebrityUpdates { + INTEGER CelebrityId PK VARCHAR UPDATE } - PUBLIC-BOOKS-ΒΙΒΛΊΑ { - SMALLINT ΜΟΝΑΔΙΚΌΣ - VARCHAR ΤΊΤΛΟΣ - VARCHAR ΠΕΡΙΓΡΑΦΉ - SMALLINT ΕΚΔΌΤΗΣ + PUBLICBOOKS { + SMALLINT UNKNOWN PK + VARCHAR UNKNOWN + VARCHAR UNKNOWN + SMALLINT UNKNOWN FK } - PUBLIC-"PUBLISHER SALES"-SALES { - VARCHAR POSTALCODE - VARCHAR COUNTRY - INTEGER BOOKID - INTEGER COUPON_ID + PUBLICPUBLISHERSALESSALES { + VARCHAR POSTALCODE FK + VARCHAR COUNTRY FK + INTEGER BOOKID FK + INTEGER COUPONID DATE PERIODENDDATE DOUBLE TOTALAMOUNT - INTEGER SALESDATAID + INTEGER SALESDATAID FK } - PUBLIC-BOOKS-AUTHORSLIST { + PUBLICBOOKSAUTHORSLIST { INTEGER ID VARCHAR FIRSTNAME VARCHAR LASTNAME } - PUBLIC-BOOKS-AUTHORS ||--o{ PUBLIC-BOOKS-BOOKAUTHORS : "foreign key" - PUBLIC-BOOKS-BOOKS ||--o{ PUBLIC-BOOKS-BOOKAUTHORS : "foreign key" - PUBLIC-BOOKS-BOOKS ||--o{ PUBLIC-BOOKS-BOOKS : "foreign key" - PUBLIC-BOOKS-BOOKS ||--o{ PUBLIC-"PUBLISHER SALES"-SALES : "foreign key" - PUBLIC-BOOKS-"Celebrities" ||--o{ PUBLIC-BOOKS-"Celebrity Updates" : "foreign key" - PUBLIC-BOOKS-PUBLISHERS ||--o{ PUBLIC-BOOKS-ΒΙΒΛΊΑ : "foreign key" - PUBLIC-"PUBLISHER SALES"-REGIONS ||--o{ PUBLIC-"PUBLISHER SALES"-SALES : "foreign key" - PUBLIC-"PUBLISHER SALES"-SALESDATA ||--o{ PUBLIC-"PUBLISHER SALES"-SALES : "foreign key" + PUBLICBOOKSAUTHORS ||--o{ PUBLICBOOKSBOOKAUTHORS : "foreign key" + PUBLICBOOKSBOOKS ||--o{ PUBLICBOOKSBOOKAUTHORS : "foreign key" + PUBLICBOOKSBOOKS ||--o{ PUBLICBOOKSBOOKS : "foreign key" + PUBLICBOOKSBOOKS ||--o{ PUBLICPUBLISHERSALESSALES : "foreign key" + PUBLICBOOKSCelebrities ||--o{ PUBLICBOOKSCelebrityUpdates : "foreign key" + PUBLICBOOKSPUBLISHERS ||--o{ PUBLICBOOKS : "foreign key" + PUBLICPUBLISHERSALESREGIONS ||--o{ PUBLICPUBLISHERSALESSALES : "foreign key" + PUBLICPUBLISHERSALESSALESDATA ||--o{ PUBLICPUBLISHERSALESSALES : "foreign key" diff --git a/schemacrawler-scripting/src/test/resources/mermaid.py b/schemacrawler-scripting/src/test/resources/mermaid.py index e6cc406c04..0728b6c4a4 100644 --- a/schemacrawler-scripting/src/test/resources/mermaid.py +++ b/schemacrawler-scripting/src/test/resources/mermaid.py @@ -1,16 +1,37 @@ +from __future__ import print_function import re + +# Mermaid only allows alphanumeric identifiers +def cleanname(name): + namepattern = r'[^0-9a-zA-Z]' + cleanedname = re.sub(namepattern, '', name) + if not cleanedname: + cleanedname = "UNKNOWN" + return cleanedname + + print('erDiagram') print('') for table in catalog.tables: - print(' ' + re.sub(r'\.', '-', table.fullName) + ' {') + print(' ' + cleanname(table.fullName) + ' {') for column in table.columns: - print(' ' + re.sub(r'\([\d ,]+\)|\[[\d ,]+\]|\s+', '', - column.columnDataType.name) + ' ' + column.name) + print(' ' + cleanname(column.columnDataType.name) + ' ' + cleanname(column.name), + end='') + if column.isPartOfPrimaryKey(): + print(' PK', end='') + elif column.isPartOfForeignKey(): + print(' FK', end='') + elif column.isPartOfUniqueIndex(): + print(' UK', end='') + if column.hasRemarks(): + print(' "' + ' '.join(column.remarks.splitlines()) + '"', + end='') + print() print(' }') print('') for table in catalog.tables: for childTable in table.referencingTables: - print(' ' + re.sub(r'\.', '-', table.fullName) + ' ||--o{ ' + - re.sub(r'\.', '-', childTable.fullName) + ' : "foreign key"') + print(' ' + cleanname(table.fullName) + ' ||--o{ ' + + cleanname(childTable.fullName) + ' : "foreign key"')