script to fix stray whitespace, RT#9959
authormark <mark>
Tue, 5 Oct 2010 01:38:42 +0000 (01:38 +0000)
committermark <mark>
Tue, 5 Oct 2010 01:38:42 +0000 (01:38 +0000)
bin/rt-trim-whitespace [new file with mode: 0755]

diff --git a/bin/rt-trim-whitespace b/bin/rt-trim-whitespace
new file mode 100755 (executable)
index 0000000..503d9cf
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use FS::Record;
+use FS::UID qw(adminsuidsetup dbh driver_name);
+
+# Remove trailing whitespace from custom field option lists and values.
+
+my $dbh = adminsuidsetup(shift) or die "Usage: rt-trim-whitespace username\n";
+die "rt-trim-whitespace only works on Pg databases" if driver_name ne 'Pg';
+
+my @updates = (
+  customfieldvalues       => 'name',
+  objectcustomfieldvalues => 'content',
+);
+
+while(@updates) {
+  my $table = shift @updates;
+  my $field = shift @updates;
+  my $select = 
+"SELECT $field FROM $table WHERE $field != substring($field from ".
+  q!E'^(.*\\\\S)\\\\s*$'! . ')';
+  
+  print "$select\n";
+  my $rows = $dbh->do($select);
+  print "$rows rows found.\n";
+  
+  if($rows) {
+    my $update =
+"UPDATE $table SET $field = substring($field from ".q!E'^(.*\\\\S)\\\\s*$'!.')'.
+" WHERE $field != substring($field from ".q!E'^(.*\\\\S)\\\\s*$'!.')';
+    print "$update\n";
+    my $rows = $dbh->do($update);
+    print "$rows updated.\n";
+  }
+}
+$dbh->commit or die $dbh->errstr;