#! /usr/bin/perl -w
use strict;
use DBI;
use FindBin;
my $new_total = 10;
open my $fh, '>', $FindBin::Bin . '/data';
print $fh ("DATE,NUMBER\n2005-05-16,2\n2005-05-17,4\n");
close $fh;
my $dbh = DBI->connect('dbi:CSV:f_dir=' . $FindBin::Bin . ";csv_eol=\n")
or warn "Can't connect to DBI";
my $total = $dbh->selectall_arrayref('select sum(number) from data')->[0][0];
if ($total||0 != $new_total)
{
require Time::localtime;
my $lt = Time::localtime::localtime(time();
my $date = sprintf("%04d-%02d-%02d", $lt->year + 1900, $lt->mon + 1, $lt->mday);
my $count = $dbh->selectall_arrayref('select count(*) from data where date = ?', {}, $date)->[0][0];
my $cur = $dbh->selectall_arrayref('select number from data where date = ?', {}, $date);
$cur = $cur->[0] while $cur and ref $cur;
my $gained = $new_total - ($total||0);
if ($count)
{
$cur += $gained;
print "Updating today ($date) to be Number = $cur\n";
$dbh->do('update data set number = ? where date = ?', {}, $cur, $date);
}
else
{
$cur = $gained;
print "Inserting into today to be Number = $cur\n";
$dbh->do('insert into data (date,number) values(?,?)', {}, $date,$cur);
}
}
####
DATE,NUMBER
2005-05-16,2
2005-05-17,8
##
##
DATE,NUMBER
2005-05-16,2
2005-05-17,2005-05-17
##
##
$ perl -MDBD::CSV -e 'print "perl\t$]\n"; print $_,"\t",${$_."::VERSION"},$/ foreach @ARGV' DBD::CSV SQL::Statement SQL::Parser Text::CSV_XS SQL::Statement::Util
perl 5.008005
DBD::CSV 0.22
SQL::Statement 1.14
SQL::Parser 1.13
Text::CSV_XS 0.23
SQL::Statement::Util -1, set by base.pm
##
##
perl 5.008006
DBD::CSV 0.21
SQL::Statement 1.09
SQL::Parser 1.09
Text::CSV_XS 0.23
SQL::Statement::Util