mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	works with a new policy in cascade mode . Please Read README.MAX . I do not know if you are the author of refint.c , but if not please tell me who is . Thank you ( excuse me for my bad english) . Massimo Lambertini massimo.lambertini@everex.it
		
			
				
	
	
		
			124 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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 ;
 | |
| 	 }
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |