aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-09-24 04:28:55 +0000
committerRob Austein <sra@hactrn.net>2007-09-24 04:28:55 +0000
commit94e6fff7963cbc9940cb7491d593cacd9f6f8218 (patch)
treebb1ee9e83f51467d7180a376510b45a52f8dffb2 /scripts
parentf6251b4c785d82ed2ee97363cfbf958fb7f7f3f8 (diff)
graphviz-sql.sh
svn path=/scripts/graphviz-sql.sh; revision=1013
Diffstat (limited to 'scripts')
-rw-r--r--scripts/graphviz-sql.sh28
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