Bug 38663: (follow-up) Make database update idempotent

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Martin Renvoize 2025-03-18 15:31:15 +00:00 committed by Katrin Fischer
parent 3c6b7ae201
commit 84c5e81b07
Signed by: kfischer
GPG key ID: 0EF6E2C03357A834

View file

@ -8,14 +8,26 @@ return {
my ($args) = @_;
my ( $dbh, $out ) = @$args{qw(dbh out)};
$dbh->do(q{ ALTER TABLE additional_field_values ADD COLUMN new_record_id VARCHAR(11) NOT NULL DEFAULT ''; });
my $sth = $dbh->prepare("SHOW COLUMNS FROM additional_field_values WHERE Field = 'record_id'");
$sth->execute();
my $column_info = $sth->fetchrow_hashref();
$dbh->do(q{ UPDATE additional_field_values SET new_record_id = CAST(record_id AS CHAR(11)); });
if ( $column_info && $column_info->{Type} eq 'int(11)' ) {
$dbh->do(q{ ALTER TABLE additional_field_values DROP COLUMN record_id; });
# Only run the migration if record_id is still an integer type
say_info( $out, "Converting record_id from int(11) to VARCHAR(11)...\n" );
$dbh->do(q{ ALTER TABLE additional_field_values RENAME COLUMN new_record_id TO record_id; });
$dbh->do(
q{ ALTER TABLE additional_field_values ADD COLUMN new_record_id VARCHAR(11) NOT NULL DEFAULT ''; });
$dbh->do(q{ UPDATE additional_field_values SET new_record_id = CAST(record_id AS CHAR(11)); });
$dbh->do(q{ ALTER TABLE additional_field_values DROP COLUMN record_id; });
$dbh->do(q{ ALTER TABLE additional_field_values RENAME COLUMN new_record_id TO record_id; });
say_success( $out, "Converted additional_field_values.record_id to VARCHAR" );
say_success( $out, "Converted record_id to VARCHAR" );
} else {
# Either the column doesn't exist or it's already been converted
say_info( $out, "No conversion needed for record_id column." );
}
},
};