rework edit/part_svc.cgi so it doesn't use a separate process/ file, this allows...
[freeside.git] / bin / fix-sequences
index be24022..2ff89d3 100755 (executable)
@@ -1,5 +1,7 @@
 #!/usr/bin/perl -Tw
 
+# run dbdef-create first!
+
 use strict;
 use DBI;
 use DBIx::DBSchema 0.21;
@@ -28,6 +30,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,11 +41,22 @@ 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\('"(public\.)?(\w+_seq)"'::text\)$/
+     ) {
+    $seq = $2;
+  }
+
   warn "fixing sequence for $table\n";
 
-  $dbh->do( "SELECT setval( '${table}_${primary_key}_seq',
-                            ( SELECT max($primary_key) FROM $table ) );" )
-    or die $dbh->errstr;
+
+  my $sql = "SELECT setval( '$seq',
+                            ( SELECT max($primary_key) FROM $table ) );";
+
+  #warn $col->default. " $seq\n$sql\n";
+  $dbh->do( $sql ) or die $dbh->errstr;
 
 }