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

use strict;
use DBI;
$|++;

my $datafile = './blib/lib/Geo/Postcode/postcodes.db';
my $csvdata = './postcodedata/postcodes.csv';
my $tablename = 'postcodes';

if (-e $datafile) {
    print "datafile present.\n";

} else {
    print "building default postcode data store\n";

    open( INPUT, $csvdata) || die("can\'t open file $csvdata: $!");
    print "sample data found\n";

    my $dbh = DBI->connect("dbi:SQLite:dbname=$datafile","","");
    print "SQLite connection successful\n" if $dbh;
    
    my @cols = split(",",<INPUT>);
    my $columns = join(", ", map { "$_ varchar(255)" } grep { $_ ne "postcode" } @cols);
    $dbh->do("create table $tablename (postcode varchar(12) primary key, $columns);");
    print "data table created. Inserting rows." if $dbh;
    
    my $counter;
    my $insert = "INSERT INTO $tablename( " . join(",",@cols) . " ) values ( " . join(",", map { "?" } @cols) . ")";
    my $sth = $dbh->prepare($insert);
    while (<INPUT>) {
        chomp;
        my @data = split(/,/);
        $sth->execute( @data );
        $counter++;
        print "." unless $counter % 40;
    }
    
    $sth->finish;
    $dbh->disconnect;
    print "\n\ndone.\n$counter points imported into sample data set.\n\n";
}