fix job queue operation with FKs, RT#13971
authorIvan Kohler <ivan@freeside.biz>
Sat, 16 Nov 2013 02:00:08 +0000 (18:00 -0800)
committerIvan Kohler <ivan@freeside.biz>
Sat, 16 Nov 2013 02:00:08 +0000 (18:00 -0800)
FS/FS/Schema.pm
FS/FS/queue.pm

index ebf4f37..bc9d37a 100644 (file)
@@ -3,7 +3,7 @@ package FS::Schema;
 use vars qw(@ISA @EXPORT_OK $DEBUG $setup_hack %dbdef_cache);
 use subs qw(reload_dbdef);
 use Exporter;
 use vars qw(@ISA @EXPORT_OK $DEBUG $setup_hack %dbdef_cache);
 use subs qw(reload_dbdef);
 use Exporter;
-use DBIx::DBSchema 0.43; #0.43 for foreign keys
+use DBIx::DBSchema 0.44; #for foreign keys with MATCH / ON DELETE/UPDATE
 use DBIx::DBSchema::Table;
 use DBIx::DBSchema::Column;
 use DBIx::DBSchema::Index;
 use DBIx::DBSchema::Table;
 use DBIx::DBSchema::Column;
 use DBIx::DBSchema::Index;
@@ -3954,6 +3954,7 @@ sub tables_hashref {
       'foreign_keys' => [
                           { columns    => [ 'jobnum' ],
                             table      => 'queue',
       'foreign_keys' => [
                           { columns    => [ 'jobnum' ],
                             table      => 'queue',
+                            on_delete  => 'CASCADE',
                           },
                         ],
     },
                           },
                         ],
     },
@@ -3974,6 +3975,7 @@ sub tables_hashref {
                           { columns    => [ 'depend_jobnum' ],
                             table      => 'queue',
                             references => [ 'jobnum' ],
                           { columns    => [ 'depend_jobnum' ],
                             table      => 'queue',
                             references => [ 'jobnum' ],
+                            on_delete  => 'CASCADE',
                           },
                         ],
     },
                           },
                         ],
     },
index 3f8763d..8ebadd4 100644 (file)
@@ -193,20 +193,6 @@ deleted as well
 sub delete {
   my $self = shift;
 
 sub delete {
   my $self = shift;
 
-  local $SIG{HUP} = 'IGNORE';
-  local $SIG{INT} = 'IGNORE';
-  local $SIG{QUIT} = 'IGNORE';
-  local $SIG{TERM} = 'IGNORE';
-  local $SIG{TSTP} = 'IGNORE';
-  local $SIG{PIPE} = 'IGNORE';
-
-  my $oldAutoCommit = $FS::UID::AutoCommit;
-  local $FS::UID::AutoCommit = 0;
-  my $dbh = dbh;
-
-  my @del = qsearch( 'queue_arg', { 'jobnum' => $self->jobnum } );
-  push @del, qsearch( 'queue_depend', { 'depend_jobnum' => $self->jobnum } );
-
   my $reportname = '';
   if ( $self->status =~/^done/ ) {
     my $dropstring = rooturl(). '/misc/queued_report\?report=';
   my $reportname = '';
   if ( $self->status =~/^done/ ) {
     my $dropstring = rooturl(). '/misc/queued_report\?report=';
@@ -216,20 +202,7 @@ sub delete {
   }
 
   my $error = $self->SUPER::delete;
   }
 
   my $error = $self->SUPER::delete;
-  if ( $error ) {
-    $dbh->rollback if $oldAutoCommit;
-    return $error;
-  }
-
-  foreach my $del ( @del ) {
-    $error = $del->delete;
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return $error;
-    }
-  }
-
-  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+  return $error if $error;
   
   unlink $reportname if $reportname;
 
   
   unlink $reportname if $reportname;