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

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.26