Thanks for the hint, Jeff. Your suggestion worked! - Ashok
On Tue, Mar 4, 2008 at 5:53 PM, Jeff Zucker <[EMAIL PROTECTED]> wrote: > Hi Ashok, > > MJD also found that bug. I've fixed it but not uploaded the new version > yet because I'm fixing a couple of other things. You can apply this > patch yourself if you need it soon: > > Changing line 1189 of SQL/Statement.pm like so fixes it: > > - $rows = $g->calc; > + $rows = $g->calc || []; > > Sorry for the problems. > > -- > Jeff > > Ashok Vemuri wrote: > > Hi, > > > > I am having a bit of trouble using aggregate functions with DBI::CSV > > (version 0.22) and could use some help figuring out why. > > > > I have the following code snippet that queries a CSV file named > > "masterdata", located at c:/test/output folder. > > > > ============================ > > use DBI; > > > > my $dbh = DBI->connect("DBI:CSV:f_dir=c:/test/output") > > or die "Cannot connect: " . $DBI::errstr(); > > > > my $sth = $dbh->prepare("SELECT callingPartyUnicodeLoginUserID as user, > > count(duration) as calls, sum(duration) as duration FROM cmasterdata > WHERE > > dateTimeOrigination > 1201979253 AND callingPartyUnicodeLoginUserID not > like > > '' group by callingPartyUnicodeLoginUserID order by calls desc") > > or die "Cannot prepare: " . $dbh->errstr(); > > > > eval { > > $sth->execute(); > > } > > > > if ($@) { > > print "error: [EMAIL PROTECTED]"; > > } > > > > ============================= > > > > The execute() statement above fails with the following error message > when > > there are no matching records in the CSV file. > > > > DBD::CSV::st execute failed: Can't use an undefined value as an ARRAY > > reference at C:/MYINST~1/objects/perl/ActivePerl- > > 5.8.8.822-MSWin32-x86-280952/site/lib/SQL/Statement.pm line 1197, <GEN0> > > line 242. > > [for Statement "SELECT callingPartyUnicodeLoginUserID as > > users,count(duration)as calls,sum(duration) as duration FROM masterdata > > WHERE dateTimeOrigination > 1201991649 AND > callingPartyUnicodeLoginUserID > > not like '' group by callingPartyUnicodeLoginUserID order by calls > desc"] > > > > > > However, the code runs fine (on the same CSV file) if I remove aggregate > > functions from the query. For example, the following query is fine: > > > > SELECT callingPartyUnicodeLoginUserID as user, dateTimeOrigination as > > datetime FROM cmasterdata WHERE dateTimeOrigination > 1201979253 AND > > callingPartyUnicodeLoginUserID not like '' > > > > Is there a known issue with DBD::CSV where trying aggregate functions > when > > no matching records gives an error, or am I just doing something wrong > here? > > > > > > TIA, > > Ashok > > > > > >