aboutsummaryrefslogtreecommitdiff
path: root/scripts/graphviz-sql.sh
blob: e46cdd37f02a1987739495000bb9362da73117a4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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