dbd::file(3)

NAME

DBD::File - Base class for writing DBI drivers for plain
files

SYNOPSIS

use DBI;
$dbh = DBI->connect("DBI:File:f_dir=/home/joe/csvdb")
    or die "Cannot connect: " . $DBI::errstr;
$sth = $dbh->prepare("CREATE TABLE a (id INTEGER, name
CHAR(10))")
    or die "Cannot prepare: " . $dbh->errstr();
$sth->execute()   or   die   "Cannot   execute:   "  .
$sth->errstr();
$sth->finish();
$dbh->disconnect();

DESCRIPTION

The DBD::File module is not a true DBI driver, but an
abstract base class for deriving concrete DBI drivers from
it. The implication is, that these drivers work with plain
files, for example CSV files or INI files. The module is
based on the SQL::Statement module, a simple SQL engine.

See DBI(3) for details on DBI, SQL::Statement(3) for details on SQL::Statement and DBD::CSV(3) or
DBD::IniFile(3) for example drivers.

Metadata

The following attributes are handled by DBI itself and not
by DBD::File, thus they all work like expected:
Active
ActiveKids
CachedKids
CompatMode (Not used)
InactiveDestroy
Kids
PrintError
RaiseError
Warn (Not used)
The following DBI attributes are handled by DBD::File:
AutoCommit
Always on
ChopBlanks
Works
NUM_OF_FIELDS
Valid after "$sth-"execute>
NUM_OF_PARAMS
Valid after "$sth-"prepare>
NAME
Valid after "$sth-"execute>; undef for Non-Select
statements.
NULLABLE
Not really working, always returns an array ref of
one's, as DBD::CSV doesn't verify input data. Valid
after "$sth-"execute>; undef for Non-Select
statements.
These attributes and methods are not supported:

bind_param_inout
CursorName
LongReadLen
LongTruncOk
Additional to the DBI attributes, you can use the follow
ing dbh attribute:
f_dir
This attribute is used for setting the directory where
CSV files are opened. Usually you set it in the dbh,
it defaults to the current directory ("."). However,
it is overwritable in the statement handles.
Driver private methods
data_sources
The "data_sources" method returns a list of subdirec
tories of the current directory in the form
"DBI:CSV:f_dir=$dirname".
If you want to read the subdirectories of another
directory, use

my($drh) = DBI->install_driver("CSV");
my(@list) = $drh->data_sources('f_dir' =>
'/usr/local/csv_data' );
list_tables
This method returns a list of file names inside
$dbh->{'f_dir'}. Example:

my($dbh) = DBI->connect("DBI:CSV:f_dir=/usr/lo
cal/csv_data");
my(@list) = $dbh->func('list_tables');
Note that the list includes all files contained in the
directory, even those that have non-valid table names,
from the view of SQL. See "Creating and dropping
tables" above.

TODO

Joins
The current version of the module works with single
table SELECT's only, although the basic design of the
SQL::Statement module allows joins and the likes.
Table name mapping
Currently it is not possible to use files with names
like "names.csv". Instead you have to use soft links
or rename files. As an alternative one might use, for
example a dbh attribute 'table_map'. It might be a
hash ref, the keys being the table names and the val
ues being the file names.

KNOWN BUGS

· The module is using flock() internally. However,
this function is not available on all platforms.
Using flock() is disabled on MacOS and Windows 95: There's no locking at all (perhaps not so impor
tant on MacOS and Windows 95, as there's a single
user anyways).

AUTHOR AND COPYRIGHT

This module is currently maintained by
Jeff Zucker
<jeff@vpservices.com>
The original author is Jochen Wiedmann.
Copyright (C) 1998 by Jochen Wiedmann
All rights reserved.
You may distribute this module under the terms of either
the GNU General Public License or the Artistic License, as
specified in the Perl README file.

SEE ALSO

DBI(3), Text::CSV_XS(3), SQL::Statement(3)
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout