changes to make it work on PostgreSQL (and add general DBD independence), added
authordpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Sat, 20 Aug 2005 15:01:48 +0000 (15:01 +0000)
committerdpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Sat, 20 Aug 2005 15:01:48 +0000 (15:01 +0000)
unique indexes, fixed schema, converted primary keys to serial.

This change breaks search for sure, but PostgreSQL is faster than SQLite on
my laptop:

User+System Time
SQLite 24.96514
PostgreSQL 11.08451

git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/BackupPC/trunk@49 8392b6e1-25fa-0310-8288-cc32f8e212ea

bin/BackupPC_updatedb

index eb2e73c..155cbb1 100755 (executable)
@@ -37,8 +37,12 @@ my $TopDir = $bpc->TopDir();
 my $beenThere = {};
 
 my $dsn = "dbi:SQLite:dbname=$TopDir/$Conf{SearchDB}";
+my $user = '';
 
-my $dbh = DBI->connect($dsn, "", "", { RaiseError => 1, AutoCommit => 0 });
+# DEBUG option!
+($dsn,$user) = qw/dbi:Pg:dbname=backuppc dpavlin/;
+
+my $dbh = DBI->connect($dsn, $user, "", { RaiseError => 1, AutoCommit => 0 });
 
 my %opt;
 
@@ -58,11 +62,18 @@ EOF
 ###################################create tables############################3
 
 if ($opt{c}) {
+       sub do_index {
+               my $index = shift || return;
+               my ($table,$col,$unique) = split(/_/, $index);
+               $unique ||= '';
+               $dbh->do(qq{ create $unique index $index on $table($col) });
+       }
+
        print "creating tables...\n";
       
        $dbh->do(qq{
                create table hosts (
-                       ID      INTEGER         PRIMARY KEY,
+                       ID      SERIAL          PRIMARY KEY,
                        name    VARCHAR(30)     NOT NULL,
                        IP      VARCHAR(15)
                );            
@@ -70,7 +81,7 @@ if ($opt{c}) {
              
        $dbh->do(qq{
                create table shares (
-                       ID      INTEGER         PRIMARY KEY,
+                       ID      SERIAL          PRIMARY KEY,
                        hostID  INTEGER         NOT NULL references hosts(id),
                        name    VARCHAR(30)     NOT NULL,
                        share   VARCHAR(200)    NOT NULL,
@@ -82,15 +93,17 @@ if ($opt{c}) {
                create table backups (
                        hostID  INTEGER         NOT NULL references hosts(id),
                        num     INTEGER         NOT NULL,
-                       date    DATE
-                       type    CHAR(1), 
+                       date    integer         NOT NULL
+                       type    CHAR(4)         not null,
                        PRIMARY KEY(hostID, num) 
                );            
        });
 
+       do_index('backups_num_unique');
+
        $dbh->do(qq{
                create table dvds (
-                       ID      INTEGER         PRIMARY KEY, 
+                       ID      SERIAL          PRIMARY KEY, 
                        num     INTEGER         NOT NULL,
                        name    VARCHAR(255)    NOT NULL,
                        mjesto  VARCHAR(255)
@@ -99,20 +112,20 @@ if ($opt{c}) {
 
        $dbh->do(qq{     
                create table files (
-                       ID      INTEGER         NOT NULL PRIMARY KEY,  
+                       ID      SERIAL          PRIMARY KEY,  
                        shareID INTEGER         NOT NULL references shares(id),
                        backupNum  INTEGER      NOT NULL references backups(num),
                        name       VARCHAR(255) NOT NULL,
                        path       VARCHAR(255) NOT NULL,
                        fullpath   VARCHAR(255) NOT NULL,
-                       date       TIMESTAMP    NOT NULL,
+                       date       integer      NOT NULL,
                        type       INTEGER      NOT NULL,
                        size       INTEGER      NOT NULL,
                        dvdid      INTEGER      references dvds(id)     
                );
        });
 
-       print "creating indexes...\n";
+       print "creating indexes:";
 
        foreach my $index (qw(
                hosts_name
@@ -126,20 +139,24 @@ if ($opt{c}) {
                files_date
                files_size
        )) {
-               my ($table,$col) = split(/_/, $index);
-               $dbh->do(qq{ create index $index on $table($col) });
+               print " $index";
+               do_index($index);
        }
+       print "...\n";
 
+       $dbh->commit;
 
 }
 
 if ($opt{d}) {
        print "deleting ";
-       foreach my $table (qw(hosts shares files dvds backups)) {
+       foreach my $table (qw(files dvds backups shares hosts)) {
                print "$table ";
                $dbh->do(qq{ DELETE FROM $table });
        }
        print " done...\n";
+
+       eval { $dbh->commit; };
 }
 
 if ($opt{v}) {
@@ -193,7 +210,7 @@ foreach my $host_key (keys %{$hosts}) {
                        $hosts->{$host_key}->{'ip'}
                );
 
-               $hostID = $dbh->func('last_insert_rowid');
+               $hostID = $dbh->last_insert_id(undef,undef,'hosts',undef);
        }
 
        print("host ".$hosts->{$host_key}->{'host'}.": ");
@@ -221,6 +238,14 @@ foreach my $host_key (keys %{$hosts}) {
                my ($broj) = $sth->{backups_broj}->fetchrow_array();
                next if ($broj > 0);
 
+               $sth->{insert_backups}->execute(
+                       $hostID,
+                       $backupNum,
+                       $backup->{'endTime'},
+                       $backup->{'type'}
+               );
+               $dbh->commit();
+
                my $files = BackupPC::View->new($bpc, $hostname, \@backups, 1);
                foreach my $share ($files->shareList($backupNum)) {
 
@@ -237,14 +262,6 @@ foreach my $host_key (keys %{$hosts}) {
                        $dbh->commit();
                }
 
-               $sth->{insert_backups}->execute(
-                       $hostID,
-                       $backupNum,
-                       $backup->{'endTime'},
-                       $backup->{'type'}
-               );
-               $dbh->commit();
-
        }
 }
 undef $sth;
@@ -277,7 +294,7 @@ sub getShareID() {
        $drop_down =~ s#//+#/#g;
 
        $sth->{insert_share}->execute($hostID,$share, $drop_down ,undef);
-       return $dbh->func('last_insert_rowid');         
+       return $dbh->last_insert_id(undef,undef,'shares',undef);
 }
 
 sub found_in_db {