updated Storage server
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Storage / Publisher.pm
index af71611..e04600f 100644 (file)
@@ -1,6 +1,7 @@
 package OpenILS::Application::Storage::Publisher;
 use base qw/OpenILS::Application::Storage/;
 our $VERSION = 1;
+my $pg = 'OpenILS::Application::Storage::Driver::Pg';
 
 use OpenSRF::EX qw/:try/;;
 use OpenSRF::Utils::Logger;
@@ -102,6 +103,42 @@ sub update_node {
        return $cdbi->update($node);
 }
 
+sub mass_delete {
+       my $self = shift;
+       my $client = shift;
+       my $search = shift;
+
+       my $where = 'WHERE ';
+
+       my $cdbi = $self->{cdbi};
+       my $table = $cdbi->table;
+
+       my @keys = sort keys %$search;
+       
+       my @wheres;
+       for my $col ( @keys ) {
+               push @wheres, "$col = ?";
+       }
+       $where .= join ' AND ', @wheres;
+
+       my $delete = "DELETE FROM $table $where";
+
+       $log->debug("Performing MASS deletion : $delete",DEBUG);
+
+       my $dbh = $cdbi->db_Main;
+       my $success = 1;
+       try {
+               my $sth = $dbh->prepare($delete);
+               $sth->execute( map { "$_" } @$search{@keys} );
+               $sth->finish;
+               $log->debug("MASS Delete succeeded",DEBUG);
+       } catch Error with {
+               $log->debug("MASS Delete FAILED : ".shift(),DEBUG);
+               $success = 0;
+       };
+       return $success;
+}
+
 sub delete_node {
        my $self = shift;
        my $client = shift;
@@ -261,6 +298,16 @@ for my $fmclass ( Fieldmapper->classes ) {
                );
        }
 
+       # Create the search-based mass delete method
+       unless ( __PACKAGE__->is_registered( $api_prefix.'.mass_delete' ) ) {
+               __PACKAGE__->register_method(
+                       api_name        => $api_prefix.'.mass_delete',
+                       method          => 'mass_delete',
+                       api_level       => 1,
+                       cdbi            => $cdbi,
+               );
+       }
+
 }
 
 1;