summaryrefslogtreecommitdiff
path: root/rt/etc/upgrade/shrink_cgm_table.pl
diff options
context:
space:
mode:
authorivan <ivan>2009-12-31 13:16:41 +0000
committerivan <ivan>2009-12-31 13:16:41 +0000
commitb4b0c7e72d7eaee2fbfc7022022c9698323203dd (patch)
treeba4cd21399e412c32fe3737eaa8478e3271509f9 /rt/etc/upgrade/shrink_cgm_table.pl
parent2dfda73eeb3eae2d4f894099754794ef07d060dd (diff)
import rt 3.8.7
Diffstat (limited to 'rt/etc/upgrade/shrink_cgm_table.pl')
-rw-r--r--rt/etc/upgrade/shrink_cgm_table.pl72
1 files changed, 72 insertions, 0 deletions
diff --git a/rt/etc/upgrade/shrink_cgm_table.pl b/rt/etc/upgrade/shrink_cgm_table.pl
new file mode 100644
index 0000000..3d153c7
--- /dev/null
+++ b/rt/etc/upgrade/shrink_cgm_table.pl
@@ -0,0 +1,72 @@
+#!/usr/bin/perl
+
+use 5.8.3;
+use strict;
+use warnings;
+
+use RT;
+RT::LoadConfig();
+RT->Config->Set('LogToScreen' => 'debug');
+RT::Init();
+
+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 => $alias .'.GroupId',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'AND',
+);
+$cgms->Limit(
+ ALIAS => $alias,
+ FIELD => 'id',
+ OPERATOR => '=',
+ VALUE => $alias .'.Via',
+ QUOTEVALUE => 0,
+ ENTRYAGGREGATOR => 'AND',
+);
+
+FetchNext( $cgms, 'init' );
+while ( my $rec = FetchNext( $cgms ) ) {
+ $RT::Handle->BeginTransaction;
+ my ($status) = $rec->Delete;
+ unless ($status) {
+ print STDERR "Couldn't delete CGM #". $rec->id;
+ exit 1;
+ }
+ $RT::Handle->Commit;
+}
+
+use constant PAGE_SIZE => 1000;
+sub FetchNext {
+ my ($objs, $init) = @_;
+ if ( $init ) {
+ $objs->RowsPerPage( PAGE_SIZE );
+ $objs->FirstPage;
+ return;
+ }
+
+ my $obj = $objs->Next;
+ return $obj if $obj;
+ $objs->RedoSearch;
+ $objs->FirstPage;
+ return $objs->Next;
+}
+