Re: A question about DBI

Jens Rehsack <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.general
Message-ID <[email protected]>
Am 10.09.2013 um 21:45 schrieb Curtis Leach <[email protected]>:

> Hello,

Aloah /o\

>  
> I’m having issues trying to query flat files using DBI & DBD::CSV.  I’m currently upgrading from v5.8.8 to v5.16.3 and with the latest Perl platform my code no longer works.  I’m running on various Windows platforms.
>  
> I’m going to Strawberry Perl v5.16.3  (32-bit)
> DBI 1.628    (upgraded core module)
> DBD-CSV 0.41
> SQL-Statement 1.405
> Text-CSV_XS 1.01
>  
> From:  Active State Perl v 5.8.8
> DBI  1.49
> DBD-CSV 0.22
> SQL-Statement 1.14
> Text-CSV_XS 0.23
>  
> Here is a code sample that reproduces my issue:
>  
> my %attr = (PrintError => 0, RaiseError => 1, AutoCommit => 1);
> my $dbh = DBI->connect ("DBI:CSV:csv_sep_char=|;csv_eol=\n", "", "", \%attr);
> $dbh->{csv_tables}->{logs} = { 'file' => basename ($src_file) };

Please use f_file instead of file (see Changes).
For a long time, "file" was handled as a depreciated flag and was mapped to f_file.
It might be removed sooner or later (or maybe is, see alias def in DBD::File::Table).

> $dbh->{f_dir} = dirname ($src_file);

It might help to do move this line before the csv_tables meta initialization
(do global init before local init).

> my $sql = "SELECT File, Extension, Directory, Message from logs where Status = " .
>                 $dbh->quote ("ERROR") . " ORDER BY Time";
> my $sth = $dbh->prepare ( $sql );
> $sth->execute ();
>  
> I turned on tracing (level 2) and according to the error message the file I’m trying to find isn’t being found.
>  
> It looks like the query is ignoring the setting of “f_dir”.  It’s instead looking for the file in the current directory, which isn’t what “f_dir” points to!  (The trace acknowledges f_dir is pointing to the correct location)
>  
> So if I manually run the code from the location where the log file is located, everything works.
>  
> So I see one of two things being true:
> 1)      “f_dir” is being ignored.

Only for table "logs", because logs's f_dir is initialized before you set it.

> 2)      There is a problem with how I initialized things.

Indeed. You should really carefully study the Changes since DBI 1.49,
also for SQL::Statement since 1.405.

> Can anyone comment about which is the real issue?  With the files I’m querying all over the place, putting chdir’s all over my code isn’t really a good option.
>  
> Curtis Leach
> Lead Engineer
> RMS  IT & ERM IT
> Phone: (702) 494-4562
> <image001.jpg>
>  
>  
> <dbitrace.log>

Cheers
-- 
Jens Rehsack
pkgsrc, Perl5
[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.