update for long table names; use sequence name directly instead of guessing
[freeside.git] / bin / fix-sequences
index f193e21..55639d9 100755 (executable)
@@ -7,7 +7,7 @@ use DBIx::DBSchema::Table;
 use DBIx::DBSchema::Column;
 use DBIx::DBSchema::ColGroup::Unique;
 use DBIx::DBSchema::ColGroup::Index;
-use FS::UID qw(adminsuidsetup);
+use FS::UID qw(adminsuidsetup driver_name);
 use FS::Record qw(dbdef);
 
 my $user = shift or die &usage;
@@ -28,6 +28,7 @@ foreach my $table ( @tables ) {
 
   my $col = $tableobj->column($primary_key);
 
+
   next unless uc($col->type) eq 'SERIAL'
               || ( driver_name eq 'Pg'
                      && defined($col->default)
@@ -38,9 +39,17 @@ foreach my $table ( @tables ) {
                      && $col->local =~ /AUTO_INCREMENT/i
                  );
 
+  my $seq = "${table}_${primary_key}_seq";
+  if ( driver_name eq 'Pg'
+       && defined($col->default) 
+       && $col->default =~ /^nextval\('"(\w+_seq)"'::text\)$/
+     ) {
+    $seq = $1;
+  }
+
   warn "fixing sequence for $table\n";
 
-  $dbh->do( "SELECT setval( '${table}_${primary_key}_seq',
+  $dbh->do( "SELECT setval( '$seq',
                             ( SELECT max($primary_key) FROM $table ) );" )
     or die $dbh->errstr;
 
@@ -50,6 +59,6 @@ $dbh->commit or die $dbh->errstr;
 $dbh->disconnect or die $dbh->errstr;
 
 sub usage {
-  die "Usage:\n  create-history-tables user [ table table ... ] \n";
+  die "Usage:\n  fix-sequences user [ table table ... ] \n";
 }