/[rserv]/bin/MasterAddTable
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /bin/MasterAddTable

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by dpavlin, Wed Dec 20 17:22:35 2000 UTC revision 1.6 by dpavlin, Wed Oct 29 18:00:18 2003 UTC
# Line 1  Line 1 
1  # -*- perl -*-  #!/usr/bin/perl -w
2  # MasterAddTable  # MasterAddTable
3  # Vadim Mikheev, (c) 2000, PostgreSQL Inc.  # Vadim Mikheev, (c) 2000, PostgreSQL Inc.
4    
# Line 6  eval '(exit $?0)' && eval 'exec perl -S Line 6  eval '(exit $?0)' && eval 'exec perl -S
6      & eval 'exec perl -S $0 $argv:q'      & eval 'exec perl -S $0 $argv:q'
7      if 0;      if 0;
8    
9    use strict;
10  use Pg;  use Pg;
11  use Getopt::Long;  use Getopt::Long;
12    
13  $| = 1;  $| = 1;
14    
15  $result = GetOptions("debug!", "verbose!", "help",  my ($debug,$verbose) = (0,0);
16                       "host=s", "user=s", "password=s");  my ($help,$masterhost,$masterport,$masteruser,$masterpassword);
17    
18  my $debug = $opt_debug || 0;  my $mserver=0;
 my $verbose = $opt_verbose || 0;  
19    
20  if (defined($opt_help) || (scalar(@ARGV) < 3)) {  my $result = GetOptions(
21      print "Usage: $0 --host=name --user=name --password=string masterdb table column\n";          "debug!" => \$debug, "verbose!" => \$verbose, "help" => \$help,
22      exit ((scalar(@ARGV) < 3)? 1: 0);          "masterhost=s" => \$masterhost, "masterport=i" => \$masterport,
23            "masteruser=s" => \$masteruser, "masterpassword=s" => \$masterpassword,
24            "masterserver=i" => \$mserver,
25            );
26    
27    if (defined($help) || (scalar(@ARGV) < 3)) {
28        print "Usage: $0 [options] masterdb table column
29    Options:
30            --masterhost=hostname --masterport=port
31            --masteruser=username --masterpassword=string
32            [--masterserver=master_number]
33    ";
34        exit ((scalar(@ARGV) < 3)? 1:0);
35  }  }
36    
37  my $dbname = $ARGV[0];  my $dbname = $ARGV[0];
# Line 27  my $table = $ARGV[1]; Line 39  my $table = $ARGV[1];
39  my $keyname = $ARGV[2];  my $keyname = $ARGV[2];
40    
41  my $minfo = "dbname=$dbname";  my $minfo = "dbname=$dbname";
42  $minfo = "$minfo host=$opt_host" if (defined($opt_host));  $minfo = "$minfo host=$masterhost" if (defined($masterhost));
43  $minfo = "$minfo user=$opt_user" if (defined($opt_user));  $minfo = "$minfo port=$masterport" if (defined($masterport));
44  $minfo = "$minfo password=$opt_password" if (defined($opt_password));  $minfo = "$minfo user=$masteruser" if (defined($masteruser));
45    $minfo = "$minfo password=$masterpassword" if (defined($masterpassword));
46    
47    print STDERR "master server nr: $mserver\n" if ($debug);
48    
49  my $conn = Pg::connectdb($minfo);  my $conn = Pg::connectdb($minfo);
50    if ($conn->status != PGRES_CONNECTION_OK) {
51        print STDERR "Failed opening $minfo\n";
52        exit 1;
53    }
54    
55  my $result = $conn->exec("BEGIN");  $result = $conn->exec("BEGIN");
56  die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK;  die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK;
57    
58  $result = $conn->exec("select pgc.oid, pga.attnum from pg_class pgc" .  $result = $conn->exec("select pgc.oid, pga.attnum from pg_class pgc" .
59                                            ", pg_attribute pga where pgc.relname = '$table'" .                        ", pg_attribute pga where pgc.relname = '$table'" .
60                                            " and pgc.oid = pga.attrelid" .                        " and pgc.oid = pga.attrelid" .
61                                            " and pga.attname = '$keyname'");                        " and pga.attname = '$keyname'");
62  die $conn->errorMessage if $result->resultStatus ne PGRES_TUPLES_OK;  die $conn->errorMessage if $result->resultStatus ne PGRES_TUPLES_OK;
63    
64  my @row = $result->fetchrow;  my @row = $result->fetchrow;
65  die "Can't find table/key\n" if ! defined $row[0] || ! defined $row[1];  die "Can't find key '$keyname' for table '$table' in database '$dbname'\n" if ! defined $row[0] || ! defined $row[1];
66    
67  $result = $conn->exec("create trigger _RSERV_TRIGGER_T_ after" .  $result = $conn->exec("create trigger _RSERV_TRIGGER_T_ after" .
68                                            " insert or update or delete on $table" .                        " insert or update or delete on \"$table\"" .
69                                            " for each row execute procedure" .                        " for each row execute procedure" .
70                                            " _rserv_log_('$row[1]')");                        " _rserv_log_('$row[1]',$mserver)");
71  die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK;  die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK;
72    
73  $result = $conn->exec("insert into _RSERV_TABLES_ (tname, cname, reloid, key)" .  $result = $conn->exec("insert into _RSERV_TABLES_ (tname, cname, reloid, key)" .
74                                            " values ('$table', '$keyname', $row[0], $row[1])");                        " values ('$table', '$keyname', $row[0], $row[1])");
75  die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK;  die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK;
76    
77  $result = $conn->exec("COMMIT");  $result = $conn->exec("COMMIT");

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.26