#!/usr/bin/perl
# Copyright (c) 2006, 2014 Eclipse Foundation, made available under EPL v1.0
# Contributors Ward Cunningham, Bjorn Freeman-Benson
# Updated by Wayne Beaton (Bug 432591)
#
# usage:
# create-batch-db.pl
#

use strict;

use DBI;

require 'dbpassconfig'; our $db_password;
chomp( $db_password );

my $dsn = 'DBI:mysql:dashboard';
my $db_user_name = 'dashboard';
my $dbh = DBI->connect($dsn, $db_user_name, $db_password);

print "Dropping old table..\n";
my $sth = $dbh->prepare(qq{
DROP TABLE IF EXISTS commits_batch;
});
$sth->execute();
$sth->finish();

print "Creating new table..\n";
$sth = $dbh->prepare(qq{
CREATE TABLE commits_batch (
	ID int not null auto_increment primary key,
	DATE datetime not null,
	YEAR int,
	YEARMONTH int,
	YEARMONTHDAY int,
	TOPPROJECT varchar(16),
	PROJECT varchar(128),
	FILENAME text,
	FILETYPE varchar(16),
	REVISION text,
	CHANGE_SIZE int,
	MESSAGE_SIZE int,
	LOGIN varchar(128),
	COMPANY varchar(128),
	INDEX (YEAR),
	INDEX (YEARMONTH),
	INDEX (YEARMONTHDAY),
	INDEX (TOPPROJECT),
	INDEX (PROJECT),
	INDEX (FILETYPE),
	INDEX (CHANGE_SIZE),
	INDEX (MESSAGE_SIZE),
	INDEX (LOGIN),
	INDEX (COMPANY)
);
});
$sth->execute();
$sth->finish();

print "Tables are..\n";
$sth = $dbh->prepare(qq{
SHOW TABLES;
});
$sth->execute();
while (my ($name) = 
    $sth->fetchrow_array())  # keep fetching until 
                             # there's nothing left
{
     print "$name\n";
}
$sth->finish();

$dbh->disconnect();
print "Complete.\n";
