[Dbix-class] Problem with count()

Lorenzo Marcantonio l.marcantonio at logossrl.com
Thu Jul 27 12:44:24 CEST 2006


I'm having a trouble using count()... If I try to do (with DBI_TRACE):

--------
my $versione_nota = $dbic->resultset('VersioneNotaLt')->search({
	ser_num => $ser_num,
	mdsrel_id_req => $mdsrel_id_req})->count();

     <- prepare_cached('SELECT COUNT( * ) FROM versione_nota_lt me WHERE 
( mdsrel_id_req = ?
AND ser_num = ? )' HASH(0x9ed224c) ...)= DBI::st=HASH(0x9e935fc) at 
DBI.pm line 839
     <- execute(1 '2')= 1 at DBI.pm line 743
     <- fetchrow_array= ( '1' ) [1 items] row1 at Cursor.pm line 86
     <- FETCH('Active')= 1 at Cursor.pm line 163
     <- finish= 1 at Cursor.pm line 163
--------


it returns 1 even if there are NO RECORDS matching! If I instead do:

--------
my @versione_nota_set = $dbic->resultset('VersioneNotaLt')->search({
         ser_num => $ser_num, mdsrel_id_req => $mdsrel_id_req});
my $versione_nota = $#versione_nota_set;

     <- prepare_cached('SELECT me.ser_num, me.mdsrel_id_req FROM 
versione_nota_lt me WHERE ( mdsrel_id_req = ? AND ser_num = ? )' 
HASH(0x9eb7ae0) ...)= DBI::st=HASH(0x9e935e8) at DBI.pm line 839
     <- execute(1 '2')= 1 at DBI.pm line 743
     <- fetchall_arrayref= [ ARRAY(0x9eb7ae0) ] row1 at Cursor.pm line 119
--------

(which is, of course, a bad way since I only need the count!), results 
are correct...

The SQL generated is fine in both cases, IMHO. Running the statement as 
sql gives good results...

DBIx::Class was as of today CPAN release, database is postgres-8.1.3, 
I'm running under catalyst...

VersioneNotaLt works from a view and the schema is trivial:

--------
package DLService::Schema::DLService::VersioneNotaLt;
use strict;
use warnings;

use base 'DBIx::Class';

__PACKAGE__->load_components("PK::Auto", "Core");
__PACKAGE__->table('versione_nota_lt');
__PACKAGE__->add_columns(qw{ ser_num mdsrel_id_req });

1;
--------

Any suggestion? I'm doing something wrong, there is a bug somewhere or I 
have to live with the workaround?

This problem apart it's a great package!




More information about the Dbix-class mailing list