X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-upgrade;h=48304d319213c65e044c05b00a8360644d37dcec;hb=725c0511a8b93b9df40117e3478d0c605ed6cc9b;hp=aca545b843975eab54d25c1dd3e1c450c0709a63;hpb=97803d56c88dc4760140d912a76cb2730fcbf713;p=freeside.git diff --git a/FS/bin/freeside-upgrade b/FS/bin/freeside-upgrade index aca545b84..48304d319 100755 --- a/FS/bin/freeside-upgrade +++ b/FS/bin/freeside-upgrade @@ -71,19 +71,17 @@ if ( dbdef->table('cgp_rule_condition') && } -# RT required field flag -# for consistency with RT schema: mysql is in CamelCase, -# pg is in lowercase, and they use different data types. -my ($t, $creq, $cdis) = - map { driver_name =~ /^mysql/i ? $_ : lc($_) } - ('CustomFields','Required','Disabled'); - -if ( dbdef->table($t) && - ! dbdef->table($t)->column($creq) ) { - push @bugfix, - "ALTER TABLE $t ADD COLUMN $creq ". - dbdef->table($t)->column($cdis)->type . - ' NOT NULL DEFAULT 0'; +if ( dbdef->table('areacode') and + dbdef->table('areacode')->primary_key eq 'code' ) +{ + if ( driver_name =~ /^mysql/i ) { + push @bugfix, + 'ALTER TABLE areacode DROP PRIMARY KEY', + 'ALTER TABLE areacode ADD COLUMN (areanum int auto_increment primary key)'; + } + else { + push @bugfix, 'ALTER TABLE areacode DROP CONSTRAINT areacode_pkey'; + } } if ( $DRY_RUN ) { @@ -114,6 +112,19 @@ my @statements = dbdef->sql_update_schema( dbdef_dist(datasrc), { 'nullify_default' => 1, }, ); +#### NEW CUSTOM FIELDS (prevent columns from being dropped by upgrade) +my $cfsth = $dbh->prepare("SELECT * FROM part_virtual_field") + or die $dbh->errstr; +$cfsth->execute or die $cfsth->errstr; +my $cf; +# likely a very inefficient implementation of this +while ( $cf = $cfsth->fetchrow_hashref ) { + my $tbl = $cf->{'dbtable'}; + my $name = $cf->{'name'}; + @statements = grep { $_ !~ /^\s*ALTER\s+TABLE\s+$tbl\s+DROP\s+COLUMN\s+cf_$name\s*$/i } + @statements; +} + @statements = grep { $_ !~ /^CREATE +INDEX +h_queue/i } #useless, holds up queue insertion @statements;