X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FProducer%2FPostgreSQL.pm;h=c99481768075c29bc102ff96234baace7156c8cd;hb=c96cd4a82bc9447c278ecf2416a7f8fb052853a7;hp=025ab73af11d19dc8feb2754dab91f72af168836;hpb=20530f39ab96c7513b7de6c96f043e4213e3356b;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Producer/PostgreSQL.pm b/lib/SQL/Translator/Producer/PostgreSQL.pm index 025ab73..c994817 100644 --- a/lib/SQL/Translator/Producer/PostgreSQL.pm +++ b/lib/SQL/Translator/Producer/PostgreSQL.pm @@ -201,6 +201,13 @@ sub produce { }); } + for my $trigger ( $schema->get_triggers ) { + push @table_defs, create_trigger( $trigger, { + add_drop_trigger => $add_drop_table, + no_comments => $no_comments, + }); + } + push @output, map { "$_;\n\n" } values %type_defs; push @output, map { "$_;\n\n" } @table_defs; if ( @fks ) { @@ -634,6 +641,30 @@ sub create_constraint return \@constraint_defs, \@fks; } +sub create_trigger { + my ($trigger,$options) = @_; + + my @statements; + + push @statements, sprintf( 'DROP TRIGGER IF EXISTS %s', $trigger->name ) + if $options->{add_drop_trigger}; + + my $scope = $trigger->scope || ''; + $scope = " FOR EACH $scope" if $scope; + + push @statements, sprintf( + 'CREATE TRIGGER %s %s %s ON %s%s %s', + $trigger->name, + $trigger->perform_action_when, + join( ' OR ', @{ $trigger->database_events } ), + $trigger->on_table, + $scope, + $trigger->action, + ); + + return @statements; +} + sub convert_datatype { my ($field) = @_;