From ad64009dd50867d7ba131126acff25e5f94c441e Mon Sep 17 00:00:00 2001 From: k1LoW Date: Wed, 25 Jul 2018 01:21:59 +0900 Subject: [PATCH] Fix MySQL constraints / indexes query --- drivers/mysql/mysql.go | 22 +++++++++++----------- output/dot/templates.go | 20 ++++++++++---------- output/md/templates.go | 24 ++++++++++++------------ 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/drivers/mysql/mysql.go b/drivers/mysql/mysql.go index bf3a4bd19..adc22fcec 100644 --- a/drivers/mysql/mysql.go +++ b/drivers/mysql/mysql.go @@ -95,7 +95,7 @@ SELECT END) AS key_type, s.index_name, GROUP_CONCAT(s.column_name ORDER BY s.seq_in_index SEPARATOR ', '), s.index_type FROM information_schema.statistics AS s -LEFT JOIN information_schema.columns AS c ON s.column_name = c.column_name +LEFT JOIN information_schema.columns AS c ON s.table_schema = c.table_schema AND s.table_name = c.table_name AND s.column_name = c.column_name WHERE s.table_name = c.table_name AND s.table_schema = ? AND s.table_name = ? @@ -142,29 +142,28 @@ SELECT kcu.referenced_table_name, GROUP_CONCAT(kcu.referenced_column_name ORDER BY kcu.ordinal_position, position_in_unique_constraint SEPARATOR ', ') AS referenced_column_name FROM information_schema.key_column_usage AS kcu -LEFT JOIN information_schema.columns AS c ON kcu.column_name = c.column_name +LEFT JOIN information_schema.columns AS c ON kcu.table_schema = c.table_schema AND kcu.table_name = c.table_name AND kcu.column_name = c.column_name LEFT JOIN ( SELECT + kcu.table_schema, + kcu.table_name, kcu.constraint_name, kcu.column_name, - (CASE WHEN c.column_key='PRI' THEN 'PRIMARY KEY' + (CASE WHEN c.column_key='PRI' THEN 'PRIMARY KEY' WHEN c.column_key='UNI' THEN 'UNIQUE' WHEN c.column_key='MUL' AND kcu.referenced_table_name IS NULL THEN 'UNIQUE' WHEN c.column_key='MUL' AND kcu.referenced_table_name IS NOT NULL THEN 'FOREIGN KEY' ELSE 'UNKNOWN' END) AS costraint_type FROM information_schema.key_column_usage AS kcu - LEFT JOIN information_schema.columns AS c ON kcu.column_name = c.column_name - WHERE - kcu.table_name = c.table_name - AND kcu.table_name = ? + LEFT JOIN information_schema.columns AS c ON kcu.table_schema = c.table_schema AND kcu.table_name = c.table_name AND kcu.column_name = c.column_name + WHERE kcu.table_name = ? AND kcu.ordinal_position = 1 ) AS sub -ON kcu.constraint_name = sub.constraint_name -WHERE kcu.table_name = c.table_name -AND kcu.table_schema= ? -AND kcu.table_name = ? +ON kcu.constraint_name = sub.constraint_name AND kcu.table_schema = sub.table_schema AND kcu.table_name = sub.table_name +WHERE kcu.table_schema= ? + AND kcu.table_name = ? GROUP BY kcu.constraint_name, sub.costraint_type, kcu.referenced_table_name`, tableName, s.Name, tableName) defer constraintRows.Close() if err != nil { @@ -183,6 +182,7 @@ GROUP BY kcu.constraint_name, sub.costraint_type, kcu.referenced_table_name`, ta ) err = constraintRows.Scan(&constraintName, &constraintType, &constraintColumnName, &constraintRefTableName, &constraintRefColumnName) if err != nil { + fmt.Printf("%s\n", tableName) return errors.WithStack(err) } switch constraintType { diff --git a/output/dot/templates.go b/output/dot/templates.go index cba526583..f129d6638 100644 --- a/output/dot/templates.go +++ b/output/dot/templates.go @@ -6,24 +6,24 @@ import ( "github.com/jessevdk/go-assets" ) -var _Assets5bd148e6149bb9adcdddfcf8cc46d6e3047dbe26 = "digraph \"{{ .Table.Name }}\" {\n // Config\n graph [rankdir=TB, layout=dot, fontname=\"Arial\"];\n node [shape=record, fontsize=14, margin=0.6, fontname=\"Arial\"];\n edge [fontsize=10, labelfloat=false, splines=none, fontname=\"Arial\"];\n\n // Tables\n \"{{ .Table.Name }}\" [shape=none, label=<\n \n {{- range $ii, $c := .Table.Columns }}\n \n {{- end }}\n
{{ .Table.Name | html }} [{{ .Table.Type | html }}]
{{ $c.Name | html }} [{{ $c.Type }}]
>];\n {{- range $i, $t := .Tables }}\n \"{{ $t.Name }}\" [shape=none, label=<\n \n {{- range $ii, $c := $t.Columns }}\n \n {{- end }}\n
{{ $t.Name | html }} [{{ $t.Type | html }}]
{{ $c.Name | html }} [{{ $c.Type | html }}]
>];\n {{- end }}\n\n // Relations\n {{- range $i, $r := .Relations }}\n \"{{ $r.Table.Name }}\":{{ $c := index $r.Columns 0 }}{{ $c.Name }} -> \"{{ $r.ParentTable.Name }}\":{{ $pc := index $r.ParentColumns 0 }}{{ $pc.Name }} [dir=back, arrowtail=crow, {{ if $r.IsAdditional }}style =\"dashed\",{{ end }} taillabel=<
{{ $r.Def | html }}
>];\n {{- end }}\n}\n" var _Assets21532ae17ad95976ac467eeaeab81f2bb1d537e4 = "digraph \"{{ .Schema.Name }}\" {\n // Config\n graph [rankdir=TB, layout=dot, fontname=\"Arial\"];\n node [shape=record, fontsize=14, margin=0.6, fontname=\"Arial\"];\n edge [fontsize=10, labelfloat=false, splines=none, fontname=\"Arial\"];\n\n // Tables\n {{- range $i, $t := .Schema.Tables }}\n \"{{ $t.Name }}\" [shape=none, label=<\n \n {{- range $ii, $c := $t.Columns }}\n \n {{- end }}\n
{{ $t.Name | html }} [{{ $t.Type | html }}]
{{ $c.Name | html }} [{{ $c.Type | html }}]
>];\n {{- end }}\n\n // Relations\n {{- range $j, $r := .Schema.Relations }}\n \"{{ $r.Table.Name }}\":{{ $c := index $r.Columns 0 }}{{ $c.Name }} -> \"{{ $r.ParentTable.Name }}\":{{ $pc := index $r.ParentColumns 0 }}{{ $pc.Name }} [dir=back, arrowtail=crow, {{ if $r.IsAdditional }}style=\"dashed\",{{ end }} taillabel=<
{{ $r.Def | html }}
>];\n {{- end }}\n}\n" +var _Assets5bd148e6149bb9adcdddfcf8cc46d6e3047dbe26 = "digraph \"{{ .Table.Name }}\" {\n // Config\n graph [rankdir=TB, layout=dot, fontname=\"Arial\"];\n node [shape=record, fontsize=14, margin=0.6, fontname=\"Arial\"];\n edge [fontsize=10, labelfloat=false, splines=none, fontname=\"Arial\"];\n\n // Tables\n \"{{ .Table.Name }}\" [shape=none, label=<\n \n {{- range $ii, $c := .Table.Columns }}\n \n {{- end }}\n
{{ .Table.Name | html }} [{{ .Table.Type | html }}]
{{ $c.Name | html }} [{{ $c.Type }}]
>];\n {{- range $i, $t := .Tables }}\n \"{{ $t.Name }}\" [shape=none, label=<\n \n {{- range $ii, $c := $t.Columns }}\n \n {{- end }}\n
{{ $t.Name | html }} [{{ $t.Type | html }}]
{{ $c.Name | html }} [{{ $c.Type | html }}]
>];\n {{- end }}\n\n // Relations\n {{- range $i, $r := .Relations }}\n \"{{ $r.Table.Name }}\":{{ $c := index $r.Columns 0 }}{{ $c.Name }} -> \"{{ $r.ParentTable.Name }}\":{{ $pc := index $r.ParentColumns 0 }}{{ $pc.Name }} [dir=back, arrowtail=crow, {{ if $r.IsAdditional }}style =\"dashed\",{{ end }} taillabel=<
{{ $r.Def | html }}
>];\n {{- end }}\n}\n" // Assets returns go-assets FileSystem -var Assets = assets.NewFileSystem(map[string][]string{"/": []string{"table.dot.tmpl", "schema.dot.tmpl"}}, map[string]*assets.File{ - "/": &assets.File{ - Path: "/", - FileMode: 0x800001ed, - Mtime: time.Unix(1530601073, 1530601073988948963), - Data: nil, - }, "/table.dot.tmpl": &assets.File{ +var Assets = assets.NewFileSystem(map[string][]string{"/": []string{"schema.dot.tmpl", "table.dot.tmpl"}}, map[string]*assets.File{ + "/table.dot.tmpl": &assets.File{ Path: "/table.dot.tmpl", FileMode: 0x1a4, - Mtime: time.Unix(1530601073, 1530601073989234926), + Mtime: time.Unix(1530370605, 1530370605000000000), Data: []byte(_Assets5bd148e6149bb9adcdddfcf8cc46d6e3047dbe26), + }, "/": &assets.File{ + Path: "/", + FileMode: 0x800001ed, + Mtime: time.Unix(1530370605, 1530370605000000000), + Data: nil, }, "/schema.dot.tmpl": &assets.File{ Path: "/schema.dot.tmpl", FileMode: 0x1a4, - Mtime: time.Unix(1530601073, 1530601073988379044), + Mtime: time.Unix(1530370605, 1530370605000000000), Data: []byte(_Assets21532ae17ad95976ac467eeaeab81f2bb1d537e4), }}, "") diff --git a/output/md/templates.go b/output/md/templates.go index aac4a29d6..8614546e3 100644 --- a/output/md/templates.go +++ b/output/md/templates.go @@ -10,20 +10,20 @@ var _Assetsac44302fb6150a621aa9d04a0350aac972bf7e18 = "# {{ .Table.Name }}\n\n## var _Assets43889384df1c6f74d764c29d91b9d5637eb46061 = "# {{ .Schema.Name }}\n\n## Tables\n{{ range $t := .Tables }}\n|{{ range $d := $t }} {{ $d | nl2br }} |{{ end }}\n{{- end }}\n\n{{ if .er -}}\n## Relations\n\n![er](schema.png)\n{{- end }}\n\n---\n\n> Generated by [tbls](https://github.com/k1LoW/tbls)" // Assets returns go-assets FileSystem -var Assets = assets.NewFileSystem(map[string][]string{"/": []string{"table.md.tmpl", "index.md.tmpl"}}, map[string]*assets.File{ - "/table.md.tmpl": &assets.File{ - Path: "/table.md.tmpl", - FileMode: 0x1a4, - Mtime: time.Unix(1532306958, 1532306958025479578), - Data: []byte(_Assetsac44302fb6150a621aa9d04a0350aac972bf7e18), +var Assets = assets.NewFileSystem(map[string][]string{"/": []string{"index.md.tmpl", "table.md.tmpl"}}, map[string]*assets.File{ + "/": &assets.File{ + Path: "/", + FileMode: 0x800001ed, + Mtime: time.Unix(1532239511, 1532239511000000000), + Data: nil, }, "/index.md.tmpl": &assets.File{ Path: "/index.md.tmpl", FileMode: 0x1a4, - Mtime: time.Unix(1532306958, 1532306958024679356), + Mtime: time.Unix(1532239511, 1532239511000000000), Data: []byte(_Assets43889384df1c6f74d764c29d91b9d5637eb46061), - }, "/": &assets.File{ - Path: "/", - FileMode: 0x800001ed, - Mtime: time.Unix(1532306958, 1532306958025410318), - Data: nil, + }, "/table.md.tmpl": &assets.File{ + Path: "/table.md.tmpl", + FileMode: 0x1a4, + Mtime: time.Unix(1532239511, 1532239511000000000), + Data: []byte(_Assetsac44302fb6150a621aa9d04a0350aac972bf7e18), }}, "")