import rt 3.8.7
[freeside.git] / rt / etc / upgrade / shrink_cgm_table.pl
1 #!/usr/bin/perl
2
3 use 5.8.3;
4 use strict;
5 use warnings;
6
7 use RT;
8 RT::LoadConfig();
9 RT->Config->Set('LogToScreen' => 'debug');
10 RT::Init();
11
12 use RT::CachedGroupMembers;
13 my $cgms = RT::CachedGroupMembers->new( $RT::SystemUser );
14 $cgms->Limit(
15     FIELD => 'id',
16     OPERATOR => '!=',
17     VALUE => 'main.Via',
18     QUOTEVALUE => 0,
19     ENTRYAGGREGATOR => 'AND',
20 );
21 $cgms->FindAllRows;
22
23 my $alias = $cgms->Join(
24     TYPE   => 'LEFT',
25     FIELD1 => 'Via',
26     TABLE2 => 'CachedGroupMembers',
27     FIELD2 => 'id',
28 );
29 $cgms->Limit(
30     ALIAS => $alias,
31     FIELD => 'MemberId',
32     OPERATOR => '=',
33     VALUE => $alias .'.GroupId',
34     QUOTEVALUE => 0,
35     ENTRYAGGREGATOR => 'AND',
36 );
37 $cgms->Limit(
38     ALIAS => $alias,
39     FIELD => 'id',
40     OPERATOR => '=',
41     VALUE => $alias .'.Via',
42     QUOTEVALUE => 0,
43     ENTRYAGGREGATOR => 'AND',
44 );
45
46 FetchNext( $cgms, 'init' );
47 while ( my $rec = FetchNext( $cgms ) ) {
48     $RT::Handle->BeginTransaction;
49     my ($status) = $rec->Delete;
50     unless ($status) {
51         print STDERR "Couldn't delete CGM #". $rec->id;
52         exit 1;
53     }
54     $RT::Handle->Commit;
55 }
56
57 use constant PAGE_SIZE => 1000;
58 sub FetchNext {
59     my ($objs, $init) = @_;
60     if ( $init ) {
61         $objs->RowsPerPage( PAGE_SIZE );
62         $objs->FirstPage;
63         return;
64     }
65
66     my $obj = $objs->Next;
67     return $obj if $obj;
68     $objs->RedoSearch;
69     $objs->FirstPage;
70     return $objs->Next;
71 }
72