
ruz at bestpractical
May 9, 2008, 8:50 AM
Post #1 of 1
(32 views)
Permalink
|
|
r12187 - rt/branches/3.8-TESTING/etc/upgrade
|
|
Author: ruz Date: Fri May 9 11:50:50 2008 New Revision: 12187 Modified: rt/branches/3.8-TESTING/etc/upgrade/shrink_cgm_table.pl Log: * refactor scrip and use transactions to protect recursive deletions Modified: rt/branches/3.8-TESTING/etc/upgrade/shrink_cgm_table.pl ============================================================================== --- rt/branches/3.8-TESTING/etc/upgrade/shrink_cgm_table.pl (original) +++ rt/branches/3.8-TESTING/etc/upgrade/shrink_cgm_table.pl Fri May 9 11:50:50 2008 @@ -12,42 +12,44 @@ use RT::CachedGroupMembers; my $cgms = RT::CachedGroupMembers->new( $RT::SystemUser ); $cgms->Limit( + FIELD => 'id', + OPERATOR => '!=', + VALUE => 'main.Via', + QUOTEVALUE => 0, + ENTRYAGGREGATOR => 'AND', +); +$cgms->FindAllRows; + +my $alias = $cgms->Join( + TYPE => 'LEFT', + FIELD1 => 'Via', + TABLE2 => 'CachedGroupMembers', + FIELD2 => 'id', +); +$cgms->Limit( + ALIAS => $alias, FIELD => 'MemberId', OPERATOR => '=', - VALUE => 'main.GroupId', + VALUE => $alias .'.GroupId', QUOTEVALUE => 0, ENTRYAGGREGATOR => 'AND', ); $cgms->Limit( + ALIAS => $alias, FIELD => 'id', OPERATOR => '=', - VALUE => 'main.Via', + VALUE => $alias .'.Via', QUOTEVALUE => 0, ENTRYAGGREGATOR => 'AND', ); -$cgms->FindAllRows; - -while ( my $loop_cgm = $cgms->Next ) { - my $descendants = RT::CachedGroupMembers->new( $RT::SystemUser ); - $descendants->Limit( - FIELD => 'Via', - VALUE => $loop_cgm->id, - ENTRYAGGREGATOR => 'AND', - ); - $descendants->Limit( - FIELD => 'id', - OPERATOR => '!=', - VALUE => 'main.Via', - QUOTEVALUE => 0, - ENTRYAGGREGATOR => 'AND', - ); - $descendants->FindAllRows; - while ( my $rec = $descendants->Next ) { - my ($status) = $rec->Delete; - unless ($status) { - print STDERR "Couldn't delete CGM #". $rec->id; - exit 1; - } +while ( my $rec = $cgms->Next ) { + $RT::Handle->BeginTransaction; + my ($status) = $rec->Delete; + unless ($status) { + print STDERR "Couldn't delete CGM #". $rec->id; + exit 1; } + $RT::Handle->Commit; } + _______________________________________________ Rt-commit mailing list Rt-commit[at]lists.bestpractical.com http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit
|