Strip evil svn:keywords
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Schema.pm
index 5ef5257..79fb443 100644 (file)
@@ -1,11 +1,9 @@
 package SQL::Translator::Schema;
 
-# vim: sw=4: ts=4:
-
 # ----------------------------------------------------------------------
-# $Id: Schema.pm,v 1.24 2005-06-27 22:02:50 duality72 Exp $
+# $Id: Schema.pm 1440 2009-01-17 16:31:57Z jawnsy $
 # ----------------------------------------------------------------------
-# Copyright (C) 2002-4 SQLFairy Authors
+# Copyright (C) 2002-2009 SQLFairy Authors
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
@@ -54,13 +52,11 @@ use SQL::Translator::Schema::Procedure;
 use SQL::Translator::Schema::Table;
 use SQL::Translator::Schema::Trigger;
 use SQL::Translator::Schema::View;
-use SQL::Translator::Schema::Graph;
+
 use SQL::Translator::Utils 'parse_list_arg';
 
 use base 'SQL::Translator::Schema::Object';
-use vars qw[ $VERSION $TABLE_ORDER $VIEW_ORDER $TRIGGER_ORDER $PROC_ORDER ];
-
-$VERSION = sprintf "%d.%02d", q$Revision: 1.24 $ =~ /(\d+)\.(\d+)/;
+use vars qw[ $TABLE_ORDER $VIEW_ORDER $TRIGGER_ORDER $PROC_ORDER ];
 
 __PACKAGE__->_attributes(qw/name database translator/);
 
@@ -74,13 +70,47 @@ sub as_graph {
 Returns the schema as an L<SQL::Translator::Schema::Graph> object.
 
 =cut
+    require  SQL::Translator::Schema::Graph;
 
     my $self = shift;
+
     return SQL::Translator::Schema::Graph->new(
         translator => $self->translator );
 }
 
 # ----------------------------------------------------------------------
+sub as_graph_pm {
+
+=pod
+
+=head2 as_graph_pm
+
+Returns a Graph::Directed object with the table names for nodes.
+
+=cut
+
+    require Graph::Directed;
+
+    my $self = shift;
+    my $g    = Graph::Directed->new;
+    
+    for my $table ( $self->get_tables ) { 
+        my $tname  = $table->name;
+        $g->add_vertex( $tname );
+    
+        for my $field ( $table->get_fields ) {
+            if ( $field->is_foreign_key ) {
+                my $fktable = $field->foreign_key_reference->reference_table;
+
+                $g->add_edge( $fktable, $tname );
+            }
+        }
+    }
+
+    return $g;
+}
+
+# ----------------------------------------------------------------------
 sub add_table {
 
 =pod
@@ -294,8 +324,8 @@ not be created.
     }
 
     $trigger->order( ++$TRIGGER_ORDER );
-    my $trigger_name = $trigger->name or return $self->error('No trigger name');
 
+    my $trigger_name = $trigger->name or return $self->error('No trigger name');
     if ( defined $self->{'triggers'}{$trigger_name} ) {
         return $self->error(qq[Can't create trigger: "$trigger_name" exists]);
     }