diff options
Diffstat (limited to 'contrib/spi/preprocessor/step2.pl')
-rwxr-xr-x | contrib/spi/preprocessor/step2.pl | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/contrib/spi/preprocessor/step2.pl b/contrib/spi/preprocessor/step2.pl new file mode 100755 index 0000000000..76ce7944cc --- /dev/null +++ b/contrib/spi/preprocessor/step2.pl @@ -0,0 +1,123 @@ +#!/usr/bin/perl + +## +## MAIN +## +$table_name=""; +$old_name=""; +$references_table=""; +$references_column=""; +$is_create=0; + + + +while ( <> ) +{ + chop; + $str=$_ ; + + if ($is_create == 1) { + $table_name=$str; + $is_create=2; + } + if ( $str =~ /^CREATE TABLE/ ){ + $is_create=1; + } + if ($is_create == 2) { + if ($str =~ /^FOREIGN KEY/){ + ($d1,$d2,$d3,$columns,$d4,$d5,$references_table,$d6) = split (/ /,$str,8); + #printf "Table $table_name $columns $references_table\n"; + + if ($table_name ne $old_name ){ + printf "--\n-- Trigger for $table_name\n--\n\n"; + } + + foreach $i ( split(/,/ , $columns ) ){ + print "CREATE INDEX I_$table_name"; + print "_$i ON $table_name ( $i ) ;\n"; + } + + printf "\nCREATE TRIGGER T_P_$table_name"; + printf "_$references_table BEFORE INSERT OR UPDATE ON $table_name FOR EACH ROW\n" ; + printf "EXECUTE PROCEDURE\n"; + printf "check_primary_key("; + $val=0; + foreach $i ( split(/,/ , $columns ) ){ + print "'$i',"; + $val=$val+1 ; + } + print "'$references_table',"; + + $t=1; + foreach $i ( split(/,/,$columns ) ){ + print "'$i'"; + if ( $t < $val ) { + printf ","; + } + $t=$t+1; + } + print " );\n\n"; + + printf "CREATE TRIGGER T_F_D_$references_table"; + printf "_$table_name BEFORE DELETE ON $references_table FOR EACH ROW\n" ; + printf "EXECUTE PROCEDURE\n"; + printf "check_foreign_key(1,'cascade',"; + $val=0; + foreach $i ( split(/,/ , $columns ) ){ + print "'$i',"; + $val=$val+1 ; + } + print "'$table_name',"; + + $t=1; + foreach $i ( split(/,/,$columns ) ){ + print "'$i'"; + if ( $t < $val ) { + printf ","; + } + $t=$t+1; + } + print " );\n\n"; + + printf "CREATE TRIGGER T_F_U_$references_table"; + printf "_$table_name AFTER UPDATE ON $references_table FOR EACH ROW\n" ; + printf "EXECUTE PROCEDURE\n"; + printf "check_foreign_key(1,'cascade',"; + $val=0; + foreach $i ( split(/,/ , $columns ) ){ + print "'$i',"; + $val=$val+1 ; + } + print "'$table_name',"; + + $t=1; + foreach $i ( split(/,/,$columns ) ){ + print "'$i'"; + if ( $t < $val ) { + printf ","; + } + $t=$t+1; + } + print " );\n\n"; + + if ($table_name ne $old_name ){ + printf "-- ********************************\n\n\n"; + } + $old_name=$table_name ; + + + + + } + } + if ($str =~ /^\)\;/ ) { + $is_create = 0 ; + } + +} + + + + + + |