package MusicDBI; use base 'Class::DBI'; use SQL::Abstract; __PACKAGE__->set_sql( count_where => 'SELECT COUNT(*) FROM __TABLE__ %s' ); sub count_where { my $class = shift; my $where = (ref $_[0]) ? $_[0] : { @_ }; my $attr = (ref $_[0]) ? $_[1] : undef; my $order = ($attr) ? delete($attr->{order_by}) : undef; $class->can('sql_count_where') or do { require Carp; Carp::croak("$class should set_sql(count_where => ...)"); }; my $sql = SQL::Abstract->new(%$attr); my($phrase, @bind) = $sql->where($where, $order); my $count = $class->sql_count_where($phrase)->select_val(@bind); }