I have a MySQL table of counter values. Without using DBIx::Class, I
would use MySQL's handy "ON DUPLICATE KEY UPDATE" functionality to
easily and safely increment these counter values.
Since I am using DBIx::Class, I cannot use this functionality, and have
to handle the incrementing functionality myself:
http://www.mail-archive.com/[email protected]/msg01010.html
I am somewhat new to DBIx::Class and was wondering if the following
method is the best way to handle counter values. I've tested it, and it
works, but wasn't sure if there was a better way.
==================================================
(all model, table, and column names are made up)
(I'm using DBIx::Class under Catalyst, hence the $c)
==================================================
my $rows = $c->model('SomeDB::Counter')->search({
counter_name => $counter_name,
})->update({
counter => \'counter + 1',
});
if ($rows eq '0E0') {
eval {
$c->model('SomeDB::Counter')->create({
counter_name => $counter_name,
counter => 1,
});
};
if ($@) {
if ($@ =~ /duplicate entry/i) {
$rows = $c->model('SomeDB::Counter')->search({
counter_name => $counter_name,
})->update({
counter => \'counter + 1',
});
if ($rows eq '0E0') {
# couldn't update or insert counter
}
} else {
# unknown error on attempted insert
}
}
}
_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/