lib

package
v0.4.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 15, 2024 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func LoadSchema

func LoadSchema(adapter adapter.Adapter) (*db.Schema, error)

LoadSchema load schema from adapter

Types

type ErdGenerator

type ErdGenerator struct {
	Filepath    string
	Table       string
	Distance    int
	SKipIndex   bool
	SkipTable   string
	Format      string
	ShowComment bool
}

ErdGenerator represents ERD generator

func NewErdGenerator added in v0.4.0

func NewErdGenerator() *ErdGenerator

NewErdGenerator returns a new NewErdGenerator instance

func (*ErdGenerator) Run

func (g *ErdGenerator) Run(schema *db.Schema) error

Run performs generator

Example (Many_tables_with_Mermaid)
withDatabase(func(a *sqlite3.Adapter) {
	createManyExampleTables(a)

	schema, err := LoadSchema(a)
	if err != nil {
		panic(err)
	}

	generator := ErdGenerator{Format: "mermaid"}
	err = generator.Run(schema)
	if err != nil {
		panic(err)
	}

	
Output:

erDiagram

articles {
  INTEGER id
  INTEGER user_id
}

comments {
  INTEGER id
  INTEGER article_id
}

followers {
  INTEGER id
  INTEGER user_id
  INTEGER target_user_id
}

followings {
  INTEGER id
  INTEGER user_id
  INTEGER target_user_id
}

likes {
  INTEGER article_id
  INTEGER user_id
}

revisions {
  INTEGER id
  INTEGER article_id
}

users {
  INTEGER id
  TEXT name
}

users ||--o{ articles : owns

articles ||--o{ comments : owns

users ||--o{ followers : owns

users ||--o{ followers : owns

users ||--o{ followings : owns

users ||--o{ followings : owns

users ||--o{ likes : owns

articles ||--o{ likes : owns

articles ||--o{ revisions : owns
Example (Many_tables_with_PlantUML)
withDatabase(func(a *sqlite3.Adapter) {
	createManyExampleTables(a)

	schema, err := LoadSchema(a)
	if err != nil {
		panic(err)
	}

	generator := ErdGenerator{Format: "plant_uml"}
	err = generator.Run(schema)
	if err != nil {
		panic(err)
	}

	
Output:

entity articles {
  * id : INTEGER
  --
  * user_id : INTEGER
  --
  index_user_id_on_articles (user_id)
}

entity comments {
  * id : INTEGER
  --
  * article_id : INTEGER
  --
  index_article_id_on_articles (article_id)
}

entity followers {
  * id : INTEGER
  --
  * user_id : INTEGER
  * target_user_id : INTEGER
  --
  - index_target_user_id_and_user_id_on_followers (target_user_id, user_id)
  - index_user_id_and_target_user_id_on_followers (user_id, target_user_id)
}

entity followings {
  * id : INTEGER
  --
  * user_id : INTEGER
  * target_user_id : INTEGER
  --
  - index_target_user_id_and_user_id_on_followings (target_user_id, user_id)
  - index_user_id_and_target_user_id_on_followings (user_id, target_user_id)
}

entity likes {
  * article_id : INTEGER
  * user_id : INTEGER
  --
  index_user_id_on_likes (user_id)
  - index_article_id_and_user_id_on_likes (article_id, user_id)
}

entity revisions {
  * id : INTEGER
  --
  * article_id : INTEGER
  --
  index_article_id_on_revisions (article_id)
}

entity users {
  * id : INTEGER
  --
  name : TEXT
}

articles }-- users

comments }-- articles

followers }-- users

followers }-- users

followings }-- users

followings }-- users

likes }-- users

likes }-- articles

revisions }-- articles
Example (Many_tables_within_a_distance_of_1_from_the_articles_with_Mermaid)
withDatabase(func(a *sqlite3.Adapter) {
	createManyExampleTables(a)

	schema, err := LoadSchema(a)
	if err != nil {
		panic(err)
	}

	generator := ErdGenerator{Format: "mermaid", Table: "articles", Distance: 1}
	err = generator.Run(schema)
	if err != nil {
		panic(err)
	}

	
Output:

erDiagram

articles {
  INTEGER id
  INTEGER user_id
}

comments {
  INTEGER id
  INTEGER article_id
}

likes {
  INTEGER article_id
  INTEGER user_id
}

revisions {
  INTEGER id
  INTEGER article_id
}

users {
  INTEGER id
  TEXT name
}

users ||--o{ articles : owns

articles ||--o{ comments : owns

users ||--o{ likes : owns

articles ||--o{ likes : owns

articles ||--o{ revisions : owns
Example (Many_tables_within_a_distance_of_1_from_the_articles_with_PlantUML)
withDatabase(func(a *sqlite3.Adapter) {
	createManyExampleTables(a)

	schema, err := LoadSchema(a)
	if err != nil {
		panic(err)
	}

	generator := ErdGenerator{Format: "plant_uml", Table: "articles", Distance: 1}
	err = generator.Run(schema)
	if err != nil {
		panic(err)
	}

	
Output:

entity articles {
  * id : INTEGER
  --
  * user_id : INTEGER
  --
  index_user_id_on_articles (user_id)
}

entity comments {
  * id : INTEGER
  --
  * article_id : INTEGER
  --
  index_article_id_on_articles (article_id)
}

entity likes {
  * article_id : INTEGER
  * user_id : INTEGER
  --
  index_user_id_on_likes (user_id)
  - index_article_id_and_user_id_on_likes (article_id, user_id)
}

entity revisions {
  * id : INTEGER
  --
  * article_id : INTEGER
  --
  index_article_id_on_revisions (article_id)
}

entity users {
  * id : INTEGER
  --
  name : TEXT
}

articles }-- users

comments }-- articles

likes }-- users

likes }-- articles

revisions }-- articles
Example (Two_tables_with_Mermaid)
withDatabase(func(a *sqlite3.Adapter) {
	a.DB.MustExec(`
			CREATE TABLE users (
				id   integer not null primary key,
				name text
		);`)

	a.DB.MustExec(`
			CREATE TABLE articles (
				id      integer not null primary key, 
				user_id integer not null, 
				FOREIGN KEY(user_id) REFERENCES users(id)
		);`)
	a.DB.MustExec("CREATE INDEX index_user_id_on_articles ON articles(user_id)")

	schema, err := LoadSchema(a)
	if err != nil {
		panic(err)
	}

	generator := ErdGenerator{Format: "mermaid"}
	err = generator.Run(schema)
	if err != nil {
		panic(err)
	}

	
Output:

erDiagram

articles {
  INTEGER id
  INTEGER user_id
}

users {
  INTEGER id
  TEXT name
}

users ||--o{ articles : owns
Example (Two_tables_with_PlantUML)
withDatabase(func(a *sqlite3.Adapter) {
	a.DB.MustExec(`
			CREATE TABLE users (
				id   integer not null primary key,
				name text
		);`)

	a.DB.MustExec(`
			CREATE TABLE articles (
				id      integer not null primary key, 
				user_id integer not null, 
				FOREIGN KEY(user_id) REFERENCES users(id)
		);`)
	a.DB.MustExec("CREATE INDEX index_user_id_on_articles ON articles(user_id)")

	schema, err := LoadSchema(a)
	if err != nil {
		panic(err)
	}

	generator := ErdGenerator{Format: "plant_uml"}
	err = generator.Run(schema)
	if err != nil {
		panic(err)
	}

	
Output:

entity articles {
  * id : INTEGER
  --
  * user_id : INTEGER
  --
  index_user_id_on_articles (user_id)
}

entity users {
  * id : INTEGER
  --
  name : TEXT
}

articles }-- users

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL