diff options
author | Rob Austein <sra@hactrn.net> | 2007-09-24 04:28:55 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-09-24 04:28:55 +0000 |
commit | 94e6fff7963cbc9940cb7491d593cacd9f6f8218 (patch) | |
tree | bb1ee9e83f51467d7180a376510b45a52f8dffb2 /scripts | |
parent | f6251b4c785d82ed2ee97363cfbf958fb7f7f3f8 (diff) |
graphviz-sql.sh
svn path=/scripts/graphviz-sql.sh; revision=1013
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/graphviz-sql.sh | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/scripts/graphviz-sql.sh b/scripts/graphviz-sql.sh new file mode 100644 index 00000000..e46cdd37 --- /dev/null +++ b/scripts/graphviz-sql.sh @@ -0,0 +1,28 @@ +#!/bin/sh - +# $Id$ + +# This uses the SQL::Translator package (aka "SQL Fairy") to parse +# an SQL schema and graph the result via GraphViz. +# +# SQL::Translator appears to be pretty good at analyzing SQL. It's not +# so hot at generating the "dot" language, or maybe it's just that +# the Perl GraphViz module is buggy, but the simplest solution is just +# to whack sqlt-graph's broken output into shape. + +# Bugs: this assumes that SQL::Translate always draws edges one->many. + +for i in *.sql +do + sqlt-graph --db MySQL --output-type canon --show-datatypes $i | + perl -0777 -pe ' + s/\\\n/ /g; + s/\\{//g; + s/\\\|-\\ /|{/g; + s/\\ *\\ *l *-\\ /|/g; + s/\\ *\\l\\}/}/g; + s/{\n/{\n\tedge [arrowtail=none, arrowhead=crow];\n/; + ' | + tee ${i%.sql}.dot | + dot -Tps2 | + ps2pdf - ${i%.dot}.pdf +done |