Index: trunk/ippToPsps/perl/ippToPsps/IppToPspsDb.pm
===================================================================
--- trunk/ippToPsps/perl/ippToPsps/IppToPspsDb.pm	(revision 28755)
+++ trunk/ippToPsps/perl/ippToPsps/IppToPspsDb.pm	(revision 28756)
@@ -11,5 +11,22 @@
 #######################################################################################
 #
-# Gets the last processed exposure ID (ini file for now - will be Db eventually TODO) 
+#  Override constructor
+#
+########################################################################################
+sub new {
+    my ($class) = @_;
+
+    # Call the constructor of the parent class, Person.
+    my $self = $class->SUPER::new($_[1], $_[2], $_[3], $_[4], $_[5], $_[6]);
+
+    bless $self, $class;
+
+    $self->update();
+    return $self;
+}
+
+#######################################################################################
+#
+# Gets the last processed exposure ID 
 #
 ########################################################################################
@@ -42,4 +59,8 @@
     my ($self, $batchId, $expId, $processed, $published, $totalDetections) = @_;
 
+print "HJHJH '$batchId', '$expId', '$processed', '$published', '$totalDetections'\n";
+
+if (!$totalDetections) {$totalDetections = -1;}
+
     my $query = $self->{_db}->prepare(<<SQL);
     UPDATE batches 
@@ -82,5 +103,5 @@
 ########################################################################################
 sub getNewBatchId {
-    my ($self, $expId, $surveyType) = @_;
+    my ($self, $expId, $surveyType, $batchType) = @_;
 
     my $query = $self->{_db}->prepare(<<SQL);
@@ -99,7 +120,7 @@
     my $query = $self->{_db}->prepare(<<SQL);
     INSERT INTO batches
-        (batch_id, exp_id, survey_id)
+        (batch_id, exp_id, survey_id, batch_type)
         VALUES
-        ($batchId, $expId, '$surveyType');
+        ($batchId, $expId, '$surveyType', '$batchType');
 
 SQL
@@ -112,3 +133,157 @@
 }
 
-
+###########################################################################
+#
+# Update Db to newest version 
+#
+###########################################################################
+sub update {
+    my ($self) = @_;
+
+    my $currentRevision = -1;
+    my $latestRevision = 4;
+
+    while ($currentRevision != $latestRevision) {
+
+        $currentRevision = $self->getRevision();
+        if ($self->{_verbose}) {print "* Current revision = $currentRevision\n";}
+
+        if ($currentRevision == 0) {$self->createRevision_1();}
+        elsif ($currentRevision == 1) {$self->createRevision_2();}
+        elsif ($currentRevision == 2) {$self->createRevision_3();}
+        elsif ($currentRevision == 3) {$self->createRevision_4();}
+    }
+}
+
+#######################################################################################
+# 
+# Create revision 1 of the database 
+#
+#######################################################################################
+sub createRevision_1 {
+    my ($self) = @_;
+
+    print "* Creating revision 1 of '$dbname'\n";
+
+    my $query = $self->{_db}->prepare(<<SQL);
+    CREATE TABLE revision (
+            revision INT, 
+            created TIMESTAMP DEFAULT NOW(),
+            primary key (revision)
+            );
+SQL
+        $query->execute;
+
+    my $query = $self->{_db}->prepare(<<SQL);
+    CREATE TABLE batches (
+            batch_id BIGINT NOT NULL, 
+            exp_id BIGINT NOT NULL, 
+            survey_id VARCHAR(30) DEFAULT "NONE",
+            processed TINYINT DEFAULT 0,
+            on_datastore TINYINT DEFAULT 0,
+            loaded_to_ODM TINYINT DEFAULT 0,
+            merge_worthy TINYINT DEFAULT 0,
+            deleted TINYINT DEFAULT 0,
+            created TIMESTAMP DEFAULT NOW(),
+            primary key (batch_id, exp_id)
+            );
+
+SQL
+        $query->execute;
+
+    setRevision(1);
+}
+
+#######################################################################################
+# 
+# Create revision 2 of the database 
+#
+#######################################################################################
+sub createRevision_2 {
+    my ($self) = @_;
+
+    print "* Creating revision 2 of '$dbname'\n";
+
+    my $query = $self->{_db}->prepare(<<SQL);
+    ALTER TABLE batches 
+        ADD COLUMN merged TINYINT DEFAULT 0
+SQL
+        $query->execute;
+
+    setRevision(2);
+}
+
+#######################################################################################
+# 
+# Create revision 3 of the database 
+#
+#######################################################################################
+sub createRevision_3 {
+    my ($self) = @_;
+
+    print "* Creating revision 3 of '$dbname'\n";
+
+    my $query = $self->{_db}->prepare(<<SQL);
+    ALTER TABLE batches 
+        ADD COLUMN total_detections BIGINT DEFAULT 0
+SQL
+        $query->execute;
+
+    setRevision(3);
+}
+
+#######################################################################################
+# 
+# Create revision 4 of the database 
+#
+#######################################################################################
+sub createRevision_4 {
+    my ($self) = @_;
+
+    print "* Creating revision 4 of '$dbname'\n";
+
+    my $query = $self->{_db}->prepare(<<SQL);
+    ALTER TABLE batches 
+        ADD COLUMN batch_type VARCHAR(30) DEFAULT "UNKNOWN"
+SQL
+        $query->execute;
+
+    setRevision(4);
+}
+
+#######################################################################################
+# 
+# Sets current revision of ippToPsps database
+#
+#######################################################################################
+sub setRevision {
+    my ($self, $revision) = @_;
+
+    my $query = $self->{_db}->prepare(<<SQL);
+    INSERT INTO revision (revision) VALUES ($revision);
+SQL
+        $query->execute;
+}
+
+#######################################################################################
+# 
+# Gets current revision of ippToPsps database
+#
+#######################################################################################
+sub getRevision {
+    my ($self) = @_;
+
+    if (!$self->SUPER::doesTableExist("revision")) {return 0;}
+
+    my $query = $self->{_db}->prepare(<<SQL);
+    SELECT revision
+        FROM revision
+        ORDER BY revision DESC LIMIT 1;
+SQL
+
+        $query->execute;
+    my @row = $query->fetchrow_array();
+
+    return $row[0];
+}
+1
