X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FFilter%2FGlobals.pm;h=621ffabd57717deff2dfa108e7e21ab156825fe7;hb=d4f84dd192edc7a64a0b1a9923f1bafc0bc5ef9d;hp=9262590dae375cd736abd2c50f96f097d1c981b3;hpb=8dc6a4a31380a1a53c9f50041620ef20337f849c;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Filter/Globals.pm b/lib/SQL/Translator/Filter/Globals.pm index 9262590..621ffab 100644 --- a/lib/SQL/Translator/Filter/Globals.pm +++ b/lib/SQL/Translator/Filter/Globals.pm @@ -1,9 +1,9 @@ package SQL::Translator::Filter::Globals; # ------------------------------------------------------------------- -# $Id: Globals.pm,v 1.1 2006-03-06 17:46:57 grommit Exp $ +# $Id: Globals.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 @@ -45,6 +45,10 @@ SQL::Translator::Filter::Globals - Add global fields and indices to all tables. fields => 'modifed', }, ] + constraints => [ + { + } + ] }, ], ) || die "SQLFairy error : ".SQL::Translator->error; @@ -61,9 +65,10 @@ sub filter { my %args = @_; my $global_table = $args{global_table} ||= '_GLOBAL_'; - my (@global_fields, @global_indices); - push @global_fields, @{ $args{fields} } if $args{fields}; - push @global_indices, @{ $args{indices} } if $args{indices}; + my (@global_fields, @global_indices, @global_constraints); + push @global_fields, @{ $args{fields} } if $args{fields}; + push @global_indices, @{ $args{indices} } if $args{indices}; + push @global_constraints, @{ $args{constraints} } if $args{constraints}; # Pull fields and indices off global table and then remove it. if ( my $gtbl = $schema->get_table( $global_table ) ) { @@ -94,6 +99,25 @@ sub filter { type => $_->type, fields => [$_->fields], options => [$_->options], + extra => scalar($_->extra), + }; + } + + foreach ( $gtbl->get_constraints ) { + push @global_constraints, { + name => $_->name, + fields => [$_->fields], + deferrable => $_->deferrable, + expression => $_->expression, + match_type => $_->match_type, + options => [$_->options], + on_delete => $_->on_delete, + on_update => $_->on_update, + reference_fields => [$_->reference_fields], + reference_table => $_->reference_table, + table => $_->table, + type => $_->type, + extra => scalar($_->extra), }; } @@ -110,10 +134,12 @@ sub filter { } foreach my $new_index ( @global_indices ) { - # Don't add if already there - #next if $tbl->get_index( $new_index->{name} ); $tbl->add_index( %$new_index ); } + + foreach my $new_constraint ( @global_constraints ) { + $tbl->add_constraint( %$new_constraint ); + } } } @@ -123,7 +149,7 @@ __END__ =head1 DESCRIPTION -Adds global fields and indices to all tables in the schema. +Adds global fields, indices and constraints to all tables in the schema. The globals to add can either be defined in the filter args or using a _GLOBAL_ table (see below). @@ -148,9 +174,10 @@ L, L Will generate duplicate indices if an index already exists on a table the same as one added globally. -=head1 TODO +Will generate duplicate constraints if a constraint already exists on a table +the same as one added globally. -Global addition of constraints. +=head1 TODO Some extra data values that can be used to control the global addition. e.g. 'skip_global'.