~vcs-imports/mammoth-replicator/trunk

« back to all changes in this revision

Viewing changes to contrib/spi/preprocessor/step2.pl

  • Committer: alvherre
  • Date: 2005-12-16 21:24:52 UTC
  • Revision ID: svn-v4:db760fc0-0f08-0410-9d63-cc6633f64896:trunk:1
Initial import of the REL8_0_3 sources from the Pgsql CVS repository.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
 
 
3
##
 
4
##  MAIN
 
5
##
 
6
$table_name="";
 
7
$old_name="";
 
8
$references_table="";
 
9
$references_column="";
 
10
$is_create=0;
 
11
 
 
12
 
 
13
 
 
14
while ( <> ) 
 
15
{
 
16
        chop;
 
17
        $str=$_ ;
 
18
 
 
19
        if ($is_create == 1) {
 
20
                $table_name=$str;
 
21
                $is_create=2;
 
22
        }
 
23
        if ( $str =~ /^CREATE TABLE/ ){
 
24
                $is_create=1;
 
25
        }
 
26
        if ($is_create == 2) {
 
27
        if ($str =~ /^FOREIGN KEY/){
 
28
                ($d1,$d2,$d3,$columns,$d4,$d5,$references_table,$d6) = split (/ /,$str,8);
 
29
                #printf "Table $table_name $columns $references_table\n";
 
30
 
 
31
                if ($table_name ne $old_name ){ 
 
32
                        printf "--\n-- Trigger for $table_name\n--\n\n";
 
33
                }
 
34
 
 
35
                foreach $i ( split(/,/ , $columns ) ){
 
36
                        print "CREATE INDEX I_$table_name";
 
37
                        print "_$i ON $table_name ( $i ) ;\n";
 
38
                }
 
39
 
 
40
                printf "\nCREATE TRIGGER T_P_$table_name";
 
41
                printf "_$references_table BEFORE INSERT OR UPDATE ON $table_name FOR EACH ROW\n" ;
 
42
                printf "EXECUTE PROCEDURE\n";
 
43
                printf "check_primary_key(";
 
44
                $val=0;
 
45
                foreach $i ( split(/,/ , $columns ) ){
 
46
                        print "'$i',";
 
47
                        $val=$val+1 ;
 
48
                }
 
49
                print "'$references_table',";
 
50
                
 
51
                $t=1;
 
52
                foreach $i ( split(/,/,$columns ) ){
 
53
                        print "'$i'";
 
54
                        if ( $t < $val ) {
 
55
                                printf ",";
 
56
                        }       
 
57
                        $t=$t+1;
 
58
                }
 
59
                print " );\n\n";
 
60
 
 
61
                printf "CREATE TRIGGER T_F_D_$references_table";
 
62
                printf "_$table_name BEFORE DELETE ON $references_table FOR EACH ROW\n" ;
 
63
                printf "EXECUTE PROCEDURE\n";
 
64
                printf "check_foreign_key(1,'cascade',";
 
65
                $val=0;
 
66
                foreach $i ( split(/,/ , $columns ) ){
 
67
                        print "'$i',";
 
68
                        $val=$val+1 ;
 
69
                }
 
70
                print "'$table_name',";
 
71
                
 
72
                $t=1;
 
73
                foreach $i ( split(/,/,$columns ) ){
 
74
                        print "'$i'";
 
75
                        if ( $t < $val ) {
 
76
                                printf ",";
 
77
                        }       
 
78
                        $t=$t+1;
 
79
                }
 
80
                print " );\n\n";
 
81
 
 
82
                printf "CREATE TRIGGER T_F_U_$references_table";
 
83
                printf "_$table_name AFTER UPDATE ON $references_table FOR EACH ROW\n" ;
 
84
                printf "EXECUTE PROCEDURE\n";
 
85
                printf "check_foreign_key(1,'cascade',";
 
86
                $val=0;
 
87
                foreach $i ( split(/,/ , $columns ) ){
 
88
                        print "'$i',";
 
89
                        $val=$val+1 ;
 
90
                }
 
91
                print "'$table_name',";
 
92
                
 
93
                $t=1;
 
94
                foreach $i ( split(/,/,$columns ) ){
 
95
                        print "'$i'";
 
96
                        if ( $t < $val ) {
 
97
                                printf ",";
 
98
                        }       
 
99
                        $t=$t+1;
 
100
                }
 
101
                print " );\n\n";
 
102
 
 
103
                if ($table_name ne $old_name ){ 
 
104
                        printf "-- ********************************\n\n\n";
 
105
                }
 
106
                $old_name=$table_name ;
 
107
 
 
108
 
 
109
 
 
110
 
 
111
         }
 
112
         }
 
113
         if ($str =~  /^\)\;/ ) {
 
114
            $is_create = 0 ;
 
115
         }
 
116
 
 
117
}
 
118
 
 
119
 
 
120
 
 
121
 
 
122
 
 
123