The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

# for both Linux/Win32
my $has_proc_pid_file
    = eval 'use Proc::PID::File; 1;';    ## no critic (ProhibitStringyEval)
my $has_home_dir
    = eval 'use File::HomeDir; 1;';      ## no critic (ProhibitStringyEval)
if ( $has_proc_pid_file and $has_home_dir ) {

    # If already running, then exit
    if ( Proc::PID::File->running( { dir => File::HomeDir->my_home } ) ) {
        exit(0);
    }
}

use FindBin qw/$Bin/;
use File::Spec;
use lib File::Spec->catdir( $FindBin::Bin, '..', '..', '..', 'lib' );
use Foorum::SUtils qw/schema/;

my $schema = schema();
my $dbh    = $schema->storage->dbh;

# from Foorum v0.2.3 on,
# `stat` table 'date' column is INT(8)

# 1, create an temp column 'new_date' INT(8)
# 2, update new_date from old 'date' column
# 3, drop old 'date' then rename 'new_date' to 'date'

# step 1
$dbh->do(<<SQL);
ALTER TABLE `stat` ADD `new_date` INT(8) UNSIGNED NOT NULL DEFAULT '0';
SQL

# step 2
my $sql = q~SELECT stat_id, date FROM stat~;
my $sth = $dbh->prepare($sql);
$sth->execute();

while ( my ( $stat_id, $date ) = $sth->fetchrow_array ) {
    $date =~ s/\-//isg;
    $dbh->do(qq~UPDATE stat SET new_date = $date WHERE stat_id = $stat_id~);
    print "Process $stat_id\n";
}

# step 3
$dbh->do(<<SQL);
ALTER TABLE `stat` DROP `date`;
SQL
sleep 1;
$dbh->do(<<SQL);
ALTER TABLE `stat` CHANGE `new_date` `date` INT(11) UNSIGNED NOT NULL DEFAULT '0';
SQL

print "Done\n";

1;