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/local/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.