From b77d5769face5c38dd34c37e98a8fce47c4e15de Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 12 Jun 2003 13:32:15 +0000 Subject: adding fix-sequences --- bin/fix-sequences | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 bin/fix-sequences (limited to 'bin/fix-sequences') diff --git a/bin/fix-sequences b/bin/fix-sequences new file mode 100755 index 000000000..f193e21d4 --- /dev/null +++ b/bin/fix-sequences @@ -0,0 +1,55 @@ +#!/usr/bin/perl -Tw + +use strict; +use DBI; +use DBIx::DBSchema 0.21; +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::Record qw(dbdef); + +my $user = shift or die &usage; +my $dbh = adminsuidsetup $user; + +my $schema = dbdef(); + +#false laziness w/fs-setup +my @tables = scalar(@ARGV) + ? @ARGV + : grep { ! /^h_/ } $schema->tables; +foreach my $table ( @tables ) { + my $tableobj = $schema->table($table) + or die "unknown table $table (did you run dbdef-create?)\n"; + + my $primary_key = $tableobj->primary_key; + next unless $primary_key; + + my $col = $tableobj->column($primary_key); + + next unless uc($col->type) eq 'SERIAL' + || ( driver_name eq 'Pg' + && defined($col->default) + && $col->default =~ /^nextval\(/i + ) + || ( driver_name eq 'mysql' + && defined($col->local) + && $col->local =~ /AUTO_INCREMENT/i + ); + + warn "fixing sequence for $table\n"; + + $dbh->do( "SELECT setval( '${table}_${primary_key}_seq', + ( SELECT max($primary_key) FROM $table ) );" ) + or die $dbh->errstr; + +} + +$dbh->commit or die $dbh->errstr; +$dbh->disconnect or die $dbh->errstr; + +sub usage { + die "Usage:\n create-history-tables user [ table table ... ] \n"; +} + -- cgit v1.2.1 From 232897b9389df4dca4773873e6e5d638ac5e8c4b Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 12 Jun 2003 13:35:42 +0000 Subject: moo --- bin/fix-sequences | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'bin/fix-sequences') diff --git a/bin/fix-sequences b/bin/fix-sequences index f193e21d4..be240226f 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -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; @@ -50,6 +50,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"; } -- cgit v1.2.1 From 1957a30d2616acadba23324b764eb03ba008b590 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 12 Jun 2003 13:43:13 +0000 Subject: update for long table names; use sequence name directly instead of guessing --- bin/fix-sequences | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'bin/fix-sequences') diff --git a/bin/fix-sequences b/bin/fix-sequences index be240226f..55639d962 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -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; -- cgit v1.2.1 From cbf32a25fcfc38632d1262ad8261e679e1c9b7c5 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 12 Jun 2003 13:47:51 +0000 Subject: debugging --- bin/fix-sequences | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'bin/fix-sequences') diff --git a/bin/fix-sequences b/bin/fix-sequences index 55639d962..d5349ee74 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -42,16 +42,19 @@ foreach my $table ( @tables ) { my $seq = "${table}_${primary_key}_seq"; if ( driver_name eq 'Pg' && defined($col->default) - && $col->default =~ /^nextval\('"(\w+_seq)"'::text\)$/ + && $col->default =~ /^nextval\('"(public\.)?(\w+_seq)"'::text\)$/ ) { - $seq = $1; + $seq = $2; } warn "fixing sequence for $table\n"; - $dbh->do( "SELECT setval( '$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; } -- cgit v1.2.1 From 6dca9c84fb27d3c01d94b993c56ea66f25d94fb2 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 12 Jun 2003 13:49:02 +0000 Subject: arg --- bin/fix-sequences | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin/fix-sequences') diff --git a/bin/fix-sequences b/bin/fix-sequences index d5349ee74..70b6df601 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -51,7 +51,7 @@ foreach my $table ( @tables ) { my $sql = "SELECT setval( '$seq', - ( SELECT max($primary_key) FROM $table ) );" ); + ( SELECT max($primary_key) FROM $table ) );"; warn $col->default. " $seq\n$sql\n"; $dbh->do( $sql ) or die $dbh->errstr; -- cgit v1.2.1 From 982fa001e4f9fdc6c544b43d7c21143facc8823d Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 12 Jun 2003 13:50:17 +0000 Subject: "doc" --- bin/fix-sequences | 2 ++ 1 file changed, 2 insertions(+) (limited to 'bin/fix-sequences') diff --git a/bin/fix-sequences b/bin/fix-sequences index 70b6df601..1ef7bd654 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -1,5 +1,7 @@ #!/usr/bin/perl -Tw +# run dbdef-create first! + use strict; use DBI; use DBIx::DBSchema 0.21; -- cgit v1.2.1 From d7fa80b06b82168ed78e888835197e09b29491dd Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 12 Jun 2003 13:50:59 +0000 Subject: remove overly-verbose debugging for now --- bin/fix-sequences | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin/fix-sequences') diff --git a/bin/fix-sequences b/bin/fix-sequences index 1ef7bd654..2ff89d3e5 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -55,7 +55,7 @@ foreach my $table ( @tables ) { my $sql = "SELECT setval( '$seq', ( SELECT max($primary_key) FROM $table ) );"; - warn $col->default. " $seq\n$sql\n"; + #warn $col->default. " $seq\n$sql\n"; $dbh->do( $sql ) or die $dbh->errstr; } -- cgit v1.2.1