summaryrefslogtreecommitdiff
path: root/contrib/spi/preprocessor/step2.pl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/spi/preprocessor/step2.pl')
-rwxr-xr-xcontrib/spi/preprocessor/step2.pl123
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 ;
+ }
+
+}
+
+
+
+
+
+