[Dbix-class] counter handling
Jim Spath
jspath at pangeamedia.com
Mon Feb 26 20:46:12 GMT 2007
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/dbix-class@lists.rawmode.org/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
}
}
}
More information about the Dbix-class
mailing list