Skip to content

Commit

Permalink
Merge fc9cb29 into 902d608
Browse files Browse the repository at this point in the history
  • Loading branch information
k1LoW authored May 26, 2022
2 parents 902d608 + fc9cb29 commit f285955
Show file tree
Hide file tree
Showing 30 changed files with 1,820 additions and 130 deletions.
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,15 @@ doc: build doc_sqlite
./tbls doc my://root:mypass@localhost:33308/relations_singular -c testdata/test_tbls_detect_relations_singular.yml -f sample/detect_relations_singular
./tbls doc maria://root:mypass@localhost:33309/testdb -c testdata/test_tbls.yml -f sample/mariadb
./tbls doc ms://SA:MSSQLServer-Passw0rd@localhost:11433/testdb -c testdata/test_tbls_mssql.yml -f sample/mssql
./tbls doc mongodb://mongoadmin:secret@localhost:27017/test?authSource=admin -f sample/mongo
env AWS_ENDPOINT_URL=http://localhost:18000 ./tbls doc dynamodb://ap-northeast-1 -c testdata/test_tbls_dynamodb.yml -f sample/dynamodb
./tbls doc pg://postgres:pgpass@localhost:55413/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml -j -f sample/adjust
./tbls doc my://root:mypass@localhost:33308/testdb -c testdata/test_tbls.yml -t png -f sample/png
./tbls doc my://root:mypass@localhost:33308/testdb -c testdata/exclude_test_tbls.yml -f sample/exclude
./tbls doc my://root:mypass@localhost:33308/testdb -c testdata/dict_test_tbls.yml -f sample/dict
./tbls doc my://root:mypass@localhost:33308/testdb -c testdata/font_test_tbls.yml -f sample/font
./tbls doc my://root:mypass@localhost:33308/testdb -c testdata/number_test_tbls.yml -f sample/number
./tbls doc my://root:mypass@localhost:33308/testdb -c testdata/hide_test_tbls.yml -f sample/hide

doc_sqlite: build
./tbls doc sq://$(PWD)/testdata/testdb.sqlite3 -c testdata/test_tbls.yml -f sample/sqlite
Expand All @@ -73,14 +75,15 @@ testdoc: build testdoc_sqlite
./tbls diff my://root:mypass@localhost:33308/relations_singular -c testdata/test_tbls_detect_relations_singular.yml sample/detect_relations_singular
./tbls diff maria://root:mypass@localhost:33309/testdb -c testdata/test_tbls.yml sample/mariadb
./tbls diff ms://SA:MSSQLServer-Passw0rd@localhost:11433/testdb -c testdata/test_tbls_mssql.yml sample/mssql
./tbls diff mongodb://mongoadmin:secret@localhost:27017/test?authSource=admin sample/mongo
env AWS_ENDPOINT_URL=http://localhost:18000 ./tbls diff dynamodb://ap-northeast-1 -c testdata/test_tbls_dynamodb.yml sample/dynamodb
./tbls diff pg://postgres:pgpass@localhost:55413/testdb?sslmode=disable -c testdata/test_tbls_postgres.yml -j sample/adjust
./tbls diff my://root:mypass@localhost:33308/testdb -c testdata/test_tbls.yml -t png sample/png
./tbls diff my://root:mypass@localhost:33308/testdb -c testdata/exclude_test_tbls.yml sample/exclude
./tbls diff my://root:mypass@localhost:33308/testdb -c testdata/dict_test_tbls.yml sample/dict
./tbls diff my://root:mypass@localhost:33308/testdb -c testdata/font_test_tbls.yml sample/font
./tbls diff my://root:mypass@localhost:33308/testdb -c testdata/number_test_tbls.yml sample/number
./tbls diff mongodb://mongoadmin:secret@localhost:27017/test?authSource=admin sample/mongo
./tbls diff my://root:mypass@localhost:33308/testdb -c testdata/hide_test_tbls.yml sample/hide

testdoc_sqlite: build
./tbls diff sq://$(PWD)/testdata/testdb.sqlite3 -c testdata/test_tbls.yml sample/sqlite
Expand Down
9 changes: 5 additions & 4 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,11 @@ type DSN struct {

// Format is document format setting
type Format struct {
Adjust bool `yaml:"adjust,omitempty"`
Sort bool `yaml:"sort,omitempty"`
Number bool `yaml:"number,omitempty"`
ShowOnlyFirstParagraph bool `yaml:"showOnlyFirstParagraph,omitempty"`
Adjust bool `yaml:"adjust,omitempty"`
Sort bool `yaml:"sort,omitempty"`
Number bool `yaml:"number,omitempty"`
ShowOnlyFirstParagraph bool `yaml:"showOnlyFirstParagraph,omitempty"`
HideColumnsWithoutValues []string `yaml:"hideColumnsWithoutValues,omitempty"`
}

// ER is er setting
Expand Down
64 changes: 64 additions & 0 deletions config/yaml.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package config

import (
"github.com/goccy/go-yaml"
"github.com/k1LoW/tbls/schema"
)

func (d DSN) MarshalYAML() ([]byte, error) {
Expand All @@ -27,3 +28,66 @@ func (d *DSN) UnmarshalYAML(data []byte) error {
}
return nil
}

func (f Format) MarshalYAML() ([]byte, error) {
if len(f.HideColumnsWithoutValues) == 0 {
s := struct {
Adjust bool `yaml:"adjust,omitempty"`
Sort bool `yaml:"sort,omitempty"`
Number bool `yaml:"number,omitempty"`
ShowOnlyFirstParagraph bool `yaml:"showOnlyFirstParagraph,omitempty"`
HideColumnsWithoutValues bool `yaml:"hideColumnsWithoutValues,omitempty"`
}{
Adjust: f.Adjust,
Sort: f.Sort,
Number: f.Number,
ShowOnlyFirstParagraph: f.ShowOnlyFirstParagraph,
HideColumnsWithoutValues: false,
}
return yaml.Marshal(s)
}
return yaml.Marshal(f)
}

func (f *Format) UnmarshalYAML(data []byte) error {
s := struct {
Adjust bool `yaml:"adjust,omitempty"`
Sort bool `yaml:"sort,omitempty"`
Number bool `yaml:"number,omitempty"`
ShowOnlyFirstParagraph bool `yaml:"showOnlyFirstParagraph,omitempty"`
HideColumnsWithoutValues interface{} `yaml:"hideColumnsWithoutValues,omitempty"`
}{}
if err := yaml.Unmarshal(data, &s); err != nil {
return err
}
f.Adjust = s.Adjust
f.Sort = s.Sort
f.Number = s.Number
f.ShowOnlyFirstParagraph = s.ShowOnlyFirstParagraph
switch v := s.HideColumnsWithoutValues.(type) {
case bool:
if v {
f.HideColumnsWithoutValues = schema.HideableColumns
}
case []interface{}:
values := []string{}
for _, vv := range v {
values = append(values, vv.(string))
}
f.HideColumnsWithoutValues = values
}
return nil
}

func unique(in []string) []string {
u := []string{}
m := map[string]struct{}{}
for _, s := range in {
if _, ok := m[s]; ok {
continue
}
u = append(u, s)
m[s] = struct{}{}
}
return u
}
82 changes: 34 additions & 48 deletions output/md/md.go
Original file line number Diff line number Diff line change
Expand Up @@ -519,40 +519,23 @@ func (m *Md) makeSchemaTemplateData(s *schema.Schema) map[string]interface{} {
func (m *Md) makeTableTemplateData(t *schema.Table) map[string]interface{} {
number := m.config.Format.Number
adjust := m.config.Format.Adjust
hideColumns := m.config.Format.HideColumnsWithoutValues

// Columns
columnsData := [][]string{}
columnsHeader := []string{
m.config.MergedDict.Lookup("Name"),
m.config.MergedDict.Lookup("Type"),
m.config.MergedDict.Lookup("Default"),
m.config.MergedDict.Lookup("Nullable"),
}
columnsHeaderLine := []string{
"----", "----", "-------", "--------",
}
if t.HasColumnWithExtraDef() {
columnsHeader = append(columnsHeader, m.config.MergedDict.Lookup("Extra Definition"))
columnsHeaderLine = append(columnsHeaderLine, "----------------")
}
if t.HasColumnWithOccurrences() {
columnsHeader = append(columnsHeader, m.config.MergedDict.Lookup("Occurrences"))
columnsHeaderLine = append(columnsHeaderLine, "----------------")
}
if t.HasColumnWithPercents() {
columnsHeader = append(columnsHeader, m.config.MergedDict.Lookup("Percents"))
columnsHeaderLine = append(columnsHeaderLine, "----------------")
}
columnsHeader = append(columnsHeader,
m.config.MergedDict.Lookup("Children"),
m.config.MergedDict.Lookup("Parents"),
m.config.MergedDict.Lookup("Comment"),
)
columnsHeaderLine = append(columnsHeaderLine, "--------", "-------", "-------")
if t.HasColumnWithLabels() {
columnsHeader = append(columnsHeader, m.config.MergedDict.Lookup("Labels"))
columnsHeaderLine = append(columnsHeaderLine, "------")
}
columnsHeader := []string{}
columnsHeaderLine := []string{}
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, true, "Name")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, true, "Type")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, true, "Default")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, true, "Nullable")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, t.ShowColumn("ExtraDef", hideColumns), "Extra Definition")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, t.ShowColumn("Occurrences", hideColumns), "Occurrences")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, t.ShowColumn("Percents", hideColumns), "Percents")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, t.ShowColumn("Children", hideColumns), "Children")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, t.ShowColumn("Parents", hideColumns), "Parents")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, t.ShowColumn("Comment", hideColumns), "Comment")
m.adjustColumnHeader(&columnsHeader, &columnsHeaderLine, t.ShowColumn("Labels", hideColumns), "Labels")

columnsData = append(columnsData, columnsHeader, columnsHeaderLine)

Expand Down Expand Up @@ -582,23 +565,13 @@ func (m *Md) makeTableTemplateData(t *schema.Table) map[string]interface{} {
c.Default.String,
fmt.Sprintf("%v", c.Nullable),
}
if t.HasColumnWithExtraDef() {
data = append(data, mdEscRep.Replace(c.ExtraDef))
}
if t.HasColumnWithOccurrences() {
data = append(data, fmt.Sprint(c.Occurrences.Int32))
}
if t.HasColumnWithPercents() {
data = append(data, fmt.Sprintf("%.1f", c.Percents.Float64))
}
data = append(data,
strings.Join(childRelations, " "),
strings.Join(parentRelations, " "),
c.Comment,
)
if t.HasColumnWithLabels() {
data = append(data, output.LabelJoin(c.Labels))
}
adjustData(&data, t.ShowColumn("ExtraDef", hideColumns), mdEscRep.Replace(c.ExtraDef))
adjustData(&data, t.ShowColumn("Occurrences", hideColumns), fmt.Sprint(c.Occurrences.Int32))
adjustData(&data, t.ShowColumn("Percents", hideColumns), fmt.Sprintf("%.1f", c.Percents.Float64))
adjustData(&data, t.ShowColumn("Children", hideColumns), strings.Join(childRelations, " "))
adjustData(&data, t.ShowColumn("Parents", hideColumns), strings.Join(parentRelations, " "))
adjustData(&data, t.ShowColumn("Comment", hideColumns), c.Comment)
adjustData(&data, t.ShowColumn("Labels", hideColumns), output.LabelJoin(c.Labels))
columnsData = append(columnsData, data)
}

Expand Down Expand Up @@ -729,6 +702,19 @@ func (m *Md) makeTableTemplateData(t *schema.Table) map[string]interface{} {
}
}

func (m *Md) adjustColumnHeader(columnsHeader *[]string, columnsHeaderLine *[]string, hasColumn bool, name string) {
if hasColumn {
*columnsHeader = append(*columnsHeader, m.config.MergedDict.Lookup(name))
*columnsHeaderLine = append(*columnsHeaderLine, strings.Repeat("-", runewidth.StringWidth(m.config.MergedDict.Lookup(name))))
}
}

func adjustData(data *[]string, hasData bool, value string) {
if hasData {
*data = append(*data, value)
}
}

func adjustTable(data [][]string) [][]string {
r := strings.NewReplacer("\r\n", "<br>", "\n", "<br>", "\r", "<br>")
w := make([]int, len(data[0]))
Expand Down
56 changes: 27 additions & 29 deletions output/xlsx/xlsx.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,20 @@ func (x *Xlsx) createSchemaSheet(w *excl.Workbook, s *schema.Schema) error {
return nil
}

func (x *Xlsx) adjustColumnHeader(columnValues *[]string, hasColumn bool, name string) {
if hasColumn {
*columnValues = append(*columnValues, x.config.MergedDict.Lookup(name))
}
}

func adjustData(hasData bool, sheet *excl.Sheet, row int, column int, value string) int {
if hasData {
setStringWithBorder(sheet, row, column, value)
return column + 1
}
return column
}

func (x *Xlsx) createTableSheet(w *excl.Workbook, t *schema.Table) (e error) {
sheetName := t.Name
if utf8.RuneCountInString(sheetName) > 31 { // MS Excel assumes a maximum length of 31 characters for sheet name
Expand Down Expand Up @@ -155,20 +169,13 @@ func (x *Xlsx) createTableSheet(w *excl.Workbook, t *schema.Table) (e error) {
x.config.MergedDict.Lookup("Default"),
x.config.MergedDict.Lookup("Nullable"),
}
if t.HasColumnWithExtraDef() {
columnValues = append(columnValues, x.config.MergedDict.Lookup("Extra Definition"))
}
if t.HasColumnWithOccurrences() {
columnValues = append(columnValues, x.config.MergedDict.Lookup("Occurrences"))
}
if t.HasColumnWithPercents() {
columnValues = append(columnValues, x.config.MergedDict.Lookup("Percents"))
}
columnValues = append(columnValues, []string{
x.config.MergedDict.Lookup("Children"),
x.config.MergedDict.Lookup("Parents"),
x.config.MergedDict.Lookup("Comment"),
}...)
hideColumns := x.config.Format.HideColumnsWithoutValues
x.adjustColumnHeader(&columnValues, t.ShowColumn("ExtraDef", hideColumns), "Extra Definition")
x.adjustColumnHeader(&columnValues, t.ShowColumn("Occurrences", hideColumns), "Occurrences")
x.adjustColumnHeader(&columnValues, t.ShowColumn("Percents", hideColumns), "Percents")
x.adjustColumnHeader(&columnValues, t.ShowColumn("Children", hideColumns), "Children")
x.adjustColumnHeader(&columnValues, t.ShowColumn("Parents", hideColumns), "Parents")
x.adjustColumnHeader(&columnValues, t.ShowColumn("Comment", hideColumns), "Comment")
setHeader(sheet, 5, columnValues)
r := 6
for i, c := range t.Columns {
Expand All @@ -177,29 +184,20 @@ func (x *Xlsx) createTableSheet(w *excl.Workbook, t *schema.Table) (e error) {
setStringWithBorder(sheet, r+i, 3, c.Default.String)
setStringWithBorder(sheet, r+i, 4, fmt.Sprintf("%v", c.Nullable))
ci := 5
if t.HasColumnWithExtraDef() {
setStringWithBorder(sheet, r+i, ci, fmt.Sprintf("%v", c.ExtraDef))
ci = ci + 1
}
if t.HasColumnWithOccurrences() {
setStringWithBorder(sheet, r+i, ci, fmt.Sprintf("%d", c.Occurrences.Int32))
ci = ci + 1
}
if t.HasColumnWithPercents() {
setStringWithBorder(sheet, r+i, ci, fmt.Sprintf("%.1f", c.Percents.Float64))
ci = ci + 1
}
ci = adjustData(t.ShowColumn("ExtraDef", hideColumns), sheet, r+i, ci, fmt.Sprintf("%v", c.ExtraDef))
ci = adjustData(t.ShowColumn("Occurrences", hideColumns), sheet, r+i, ci, fmt.Sprintf("%d", c.Occurrences.Int32))
ci = adjustData(t.ShowColumn("Percent", hideColumns), sheet, r+i, ci, fmt.Sprintf("%.1f", c.Percents.Float64))
children := []string{}
for _, child := range c.ChildRelations {
children = append(children, child.Table.Name)
}
setStringWithBorder(sheet, r+i, ci+0, strings.Join(children, "\n"))
ci = adjustData(t.ShowColumn("Children", hideColumns), sheet, r+i, ci, strings.Join(children, "\n"))
parents := []string{}
for _, parent := range c.ParentRelations {
parents = append(parents, parent.ParentTable.Name)
}
setStringWithBorder(sheet, r+i, ci+1, strings.Join(parents, "\n"))
setStringWithBorder(sheet, r+i, ci+2, c.Comment)
ci = adjustData(t.ShowColumn("Parents", hideColumns), sheet, r+i, ci, strings.Join(parents, "\n"))
ci = adjustData(t.ShowColumn("Comment", hideColumns), sheet, r+i, ci, c.Comment)
}
r = r + len(t.Columns)

Expand Down
43 changes: 43 additions & 0 deletions sample/hide/CamelizeTable.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# CamelizeTable

## Description

<details>
<summary><strong>Table Definition</strong></summary>

```sql
CREATE TABLE `CamelizeTable` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
```

</details>

## Columns

| Name | Type | Default | Nullable | Extra Definition |
| ---- | ---- | ------- | -------- | ---------------- |
| id | bigint | | false | auto_increment |
| created | datetime | | false | |

## Constraints

| Name | Type | Definition |
| ---- | ---- | ---------- |
| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) |

## Indexes

| Name | Definition |
| ---- | ---------- |
| PRIMARY | PRIMARY KEY (id) USING BTREE |

## Relations

![er](CamelizeTable.svg)

---

> Generated by [tbls](https://github.com/k1LoW/tbls)
29 changes: 29 additions & 0 deletions sample/hide/CamelizeTable.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit f285955

Please sign in to comment.