in reply to Re^4: DBIC intermittently returning rows missing date_time value
in thread DBIC intermittently returning rows missing date_time value

Arghh, sorry Corian, I forgot I'd slightly changed the output since the first post. Restoring the code and re-running the trace gives the same output with the exception that the $date_time warning changes to...
Use of uninitialized value in concatenation (.) or string at D:/upload +/Websites/iic2/script/../lib/iic2/Controller/tests/ line 25.
Thanks, Rob

Replies are listed 'Best First'.
Re^6: DBIC intermittently returning rows missing date_time value
by Corion (Patriarch) on Jun 29, 2009 at 11:41 UTC

    If the value in the date_time column is not null, then the value in the time_taken column is null, which gets turned into undef I guess.

      No, time_taken is always fine, date_time is not coming back from the get_column request, even though it's there.

      The report is selected and ordered by date_time, so if the date_time value was actually null it wouldn't be in the result set, or they'd all be at the end or the beginning, rather than what I'm seeing, which is the occasional row failing to populate date_time in the results.

        Now, looking at your actual output, I see that indeed, date_time cannot be NULL because you order by it. So it must be a bug or a problem with either DBIx::Class or your database driver. I don't know if it's easy to get at the unsullied result set as returned by DBI, but maybe you can determine the culprit by doing:

        my $dbh = DBI->connect(..., {RaiseError => 1}); my $sth = $dbh->prepare(<<SQL); SELECT,, me.date_time, me.status_code, me.time_taken + FROM tests me WHERE ( ( ( date_time <= ? AND date_time >= ? ) AND name = ? ) ) ORDER BY date_time SQL $sth->execute('2009-06-24 23:59:59', '2009-06-24 00:00:00', 'ART_CRV') +; my $res = $sth->fetchall_arrayref(); print Dumper($res);

        If you find any undef in there, the problem is with your DBD. If you don't find any undef there, the problem is likely in your DBIx::Class stack somewhere.