info > DBD::File::Developers

DBD::File::Developers(3pm) - Developers documentation for DBD::File

๐Ÿ“‹ NAME

DBD::File::Developers - Developers documentation for DBD::File

๐Ÿš€ Quick Reference

Use CaseCommandDescription
๐Ÿ”ง Create driver packageuse base qw( DBD::File );Base your DBD driver on DBD::File
๐Ÿ“ฆ Driver package classpackage DBD::XXX::dr; @ISA = qw( DBD::File::dr );Define driver class inheriting from DBD::File::dr
๐Ÿ—„๏ธ Database handle classpackage DBD::XXX::db; @ISA = qw( DBD::File::db );Define database handle class
๐Ÿ“œ Statement handle classpackage DBD::XXX::st; @ISA = qw( DBD::File::st );Define statement handle class
๐Ÿ“‹ Statement classpackage DBD::XXX::Statement; @ISA = qw( DBD::File::Statement );Define statement class for SQL engine
๐Ÿ“ Table classpackage DBD::XXX::Table; @ISA = qw( DBD::File::Table );Define table class for file access
๐Ÿ”— Connect to databaseDBI->connect('DBI:XXX:', undef, undef, {})Connect to DBD::File-based driver
๐Ÿ“Š Get meta attribute$dbh->xxx_get_meta($table, $attr)Retrieve a table's meta attribute
โœ๏ธ Set meta attribute$dbh->xxx_set_meta($table, $attr, $value)Set a table's meta attribute
๐Ÿงน Clear meta cache$dbh->xxx_clear_meta($table)Clear cached meta information for a table
๐Ÿ“‹ List tables$dbh->tables()List available tables
๐Ÿ” Data sourcesDBI->data_sources($driver)Get available data sources for a driver

๐Ÿ“ SYNOPSIS

package DBD::myDriver;

use base qw( DBD::File );

sub driver
{
    ...
    my $drh = $proto->SUPER::driver ($attr);
    ...
    return $drh->{class};
    }

sub CLONE { ... }

package DBD::myDriver::dr;

@ISA = qw( DBD::File::dr );

sub data_sources { ... }
...

package DBD::myDriver::db;

@ISA = qw( DBD::File::db );

sub init_valid_attributes { ... }
sub init_default_attributes { ... }
sub set_versions { ... }
sub validate_STORE_attr { my ($dbh, $attrib, $value) = @_; ... }
sub validate_FETCH_attr { my ($dbh, $attrib) = @_; ... }
sub get_myd_versions { ... }

package DBD::myDriver::st;

@ISA = qw( DBD::File::st );

sub FETCH { ... }
sub STORE { ... }

package DBD::myDriver::Statement;

@ISA = qw( DBD::File::Statement );

package DBD::myDriver::Table;

@ISA = qw( DBD::File::Table );

my %reset_on_modify = (
    myd_abc => "myd_foo",
    myd_mno => "myd_bar",
    );
__PACKAGE__->register_reset_on_modify (\%reset_on_modify);
my %compat_map = (
    abc => 'foo_abc',
    xyz => 'foo_xyz',
    );
__PACKAGE__->register_compat_map (\%compat_map);

sub bootstrap_table_meta { ... }
sub init_table_meta { ... }
sub table_meta_attr_changed { ... }
sub open_data { ... }

sub fetch_row { ... }
sub push_row { ... }
sub push_names { ... }

# optimize the SQL engine by add one or more of
sub update_current_row { ... }
# or
sub update_specific_row { ... }
# or
sub update_one_row { ... }
# or
sub insert_new_row { ... }
# or
sub delete_current_row { ... }
# or
sub delete_one_row { ... }

๐Ÿ” DESCRIPTION

This document describes how DBD developers can write DBD::File based DBI drivers. It supplements DBI::DBD and DBI::DBD::SqlEngine::Developers, which you should read first.

๐Ÿ›๏ธ CLASSES

Each DBI driver must provide a package global "driver" method and three DBI related classes:

๐Ÿ”ต DBD::File::dr

Driver package, contains the methods DBI calls indirectly via DBI interface:

DBI->connect ('DBI:DBM:', undef, undef, {})

# invokes
package DBD::DBM::dr;
@DBD::DBM::dr::ISA = qw( DBD::File::dr );

sub connect ($$;$$$)
{
    ...
    }

Similar for "data_sources" and "disconnect_all".

Pure Perl DBI drivers derived from DBD::File do not usually need to override any of the methods provided through the DBD::XXX::dr package however if you need additional initialization in the connect method you may need to.

๐ŸŸข DBD::File::db

Contains the methods which are called through DBI database handles ($dbh). e.g.,

$sth = $dbh->prepare ("select * from foo");
# returns the f_encoding setting for table foo
$dbh->csv_get_meta ("foo", "f_encoding");

DBD::File provides the typical methods required here. Developers who write DBI drivers based on DBD::File need to override the methods "set_versions" and "init_valid_attributes".

๐ŸŸก DBD::File::st

Contains the methods to deal with prepared statement handles. e.g.,

$sth->execute () or die $sth->errstr;

๐Ÿ“ฆ DBD::File

This is the main package containing the routines to initialize DBD::File based DBI drivers. Primarily the "DBD::File::driver" method is invoked, either directly from DBI when the driver is initialized or from the derived class.

package DBD::DBM;

use base qw( DBD::File );

sub driver
{
    my ($class, $attr) = @_;
    ...
    my $drh = $class->SUPER::driver ($attr);
    ...
    return $drh;
    }

It is not necessary to implement your own driver method as long as additional initialization (e.g. installing more private driver methods) is not required. You do not need to call "setup_driver" as DBD::File takes care of it.

๐Ÿ”ต DBD::File::dr

The driver package contains the methods DBI calls indirectly via the DBI interface (see "DBI Class Methods" in DBI).

DBD::File based DBI drivers usually do not need to implement anything here, it is enough to do the basic initialization:

package DBD:XXX::dr;

@DBD::XXX::dr::ISA = qw (DBD::File::dr);
$DBD::XXX::dr::imp_data_size     = 0;
$DBD::XXX::dr::data_sources_attr = undef;
$DBD::XXX::ATTRIBUTION = "DBD::XXX $DBD::XXX::VERSION by Hans Mustermann";

๐ŸŸข DBD::File::db

This package defines the database methods, which are called via the DBI database handle $dbh.

Methods provided by DBD::File:

# for DBD::CSV
$dbh->{csv_meta} = "csv_tables";
# for DBD::DBM
$dbh->{dbm_meta} = "dbm_tables";
# for DBD::AnyData
$dbh->{ad_meta}  = "ad_tables";

๐ŸŸก DBD::File::st

Contains the methods to deal with prepared statement handles:

๐Ÿ“ DBD::File::TableSource::FileSystem

Provides data sources and table information on database driver and database handle level.

package DBD::File::TableSource::FileSystem;

sub data_sources ($;$)
{
    my ($class, $drh, $attrs) = @_;
    ...
    }

sub avail_tables
{
    my ($class, $drh) = @_;
    ...
    }

The "data_sources" method is called when the user invokes any of the following:

@ary = DBI->data_sources ($driver);
@ary = DBI->data_sources ($driver, \%attr);

@ary = $dbh->data_sources ();
@ary = $dbh->data_sources (\%attr);

The "avail_tables" method is called when the user invokes any of the following:

@names = $dbh->tables ($catalog, $schema, $table, $type);

$sth   = $dbh->table_info ($catalog, $schema, $table, $type);
$sth   = $dbh->table_info ($catalog, $schema, $table, $type, \%attr);

$dbh->func ("list_tables");

Every time where an "\%attr" argument can be specified, this "\%attr" object's "sql_table_source" attribute is preferred over the $dbh attribute or the driver default.

๐Ÿ“„ DBD::File::DataSource::Stream

package DBD::File::DataSource::Stream;

@DBD::File::DataSource::Stream::ISA = 'DBI::DBD::SqlEngine::DataSource';

sub complete_table_name
{
    my ($self, $meta, $file, $respect_case) = @_;
    ...
    }

Clears all meta attributes identifying a file: "f_fqfn", "f_fqbn" and "f_fqln". The table name is set according to $respect_case and "$meta->{sql_identifier_case}" (SQL_IC_LOWER, SQL_IC_UPPER).

package DBD::File::DataSource::Stream;

sub apply_encoding
{
    my ($self, $meta, $fn) = @_;
    ...
    }

Applies the encoding from meta information ("$meta->{f_encoding}") to the file handled opened in "open_data".

package DBD::File::DataSource::Stream;

sub open_data
{
    my ($self, $meta, $attrs, $flags) = @_;
    ...
    }

Opens ("dup (2)") the file handle provided in "$meta->{f_file}".

package DBD::File::DataSource::Stream;

sub can_flock { ... }

Returns whether "flock (2)" is available or not (avoids retesting in subclasses).

๐Ÿ“„ DBD::File::DataSource::File

package DBD::File::DataSource::File;

sub complete_table_name ($$;$)
{
    my ($self, $meta, $table, $respect_case) = @_;
    ...
    }

The method "complete_table_name" tries to map a filename to the associated table name. It is called with a partially filled meta structure for the resulting table containing at least the following attributes: "f_ext", "f_dir", "f_lockfile" and "sql_identifier_case".

If a file/table map can be found then this method sets the "f_fqfn", "f_fqbn", "f_fqln" and "table_name" attributes in the meta structure. If a map cannot be found the table name will be undef.

package DBD::File::DataSource::File;

sub open_data ($)
{
    my ($self, $meta, $attrs, $flags) = @_;
    ...
    }

Depending on the attributes set in the table's meta data, the following steps are performed. Unless "f_dontopen" is set to a true value, "f_fqfn" must contain the full qualified file name for the table to work on (file2table ensures this). The encoding in "f_encoding" is applied if set and the file is opened. If "<f_fqln "> (full qualified lock name) is set, this file is opened, too. Depending on the value in "f_lock", the appropriate lock is set on the opened data file or lock file.

๐Ÿ“ DBD::File::Statement

Derives from DBI::SQL::Nano::Statement to provide following method:

sub open_table ($$$$$)
{
    my ($self, $data, $table, $createMode, $lockMode) = @_;

    my $class = ref $self;
    $class =~ s/::Statement/::Table/;

    my $flags = {
        createMode => $createMode,
        lockMode   => $lockMode,
        };
    $self->{command} eq "DROP" and $flags->{dropMode} = 1;

    return $class->new ($data, { table => $table }, $flags);
    } # open_table

๐Ÿ“ DBD::File::Table

Derives from DBI::SQL::Nano::Table and provides physical file access for the table data which are stored in the files.

my %reset_on_modify = (xxx_foo => "xxx_bar");
__PACKAGE__->register_reset_on_modify (\%reset_on_modify);
# from DBD::DBM
my %compat_map = (dbm_ext => "f_ext");
__PACKAGE__->register_compat_map (\%compat_map);

You should consult the documentation of "SQL::Eval::Table" (see SQL::Eval) to get more information about the abstract methods of the table's base class you have to override and a description of the table meta information expected by the SQL engines.

๐Ÿ‘ค AUTHOR

The module DBD::File is currently maintained by

H.Merijn Brand < h.m.brand at xs4all.nl > and Jens Rehsack < rehsack at googlemail.com >

The original author is Jochen Wiedmann.

๐Ÿ“œ COPYRIGHT AND LICENSE

Copyright (C) 2010-2013 by H.Merijn Brand & Jens Rehsack

All rights reserved.

You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file.


perl v5.34.0 โ€” 2026-06-22 โ€” DBD::File::Developers(3pm)

DBD::File::Developers
DBD::File::Developers(3pm) - Developers documentation for DBD::File ๐Ÿ“‹ NAME ๐Ÿš€ Quick Reference ๐Ÿ“ SYNOPSIS ๐Ÿ” DESCRIPTION ๐Ÿ›๏ธ CLASSES
๐Ÿ”ต DBD::File::dr ๐ŸŸข DBD::File::db ๐ŸŸก DBD::File::st ๐Ÿ“ฆ DBD::File ๐Ÿ”ต DBD::File::dr ๐ŸŸข DBD::File::db ๐ŸŸก DBD::File::st ๐Ÿ“ DBD::File::TableSource::FileSystem ๐Ÿ“„ DBD::File::DataSource::Stream ๐Ÿ“„ DBD::File::DataSource::File ๐Ÿ“ DBD::File::Statement ๐Ÿ“ DBD::File::Table
๐Ÿ‘ค AUTHOR ๐Ÿ“œ COPYRIGHT AND LICENSE

Generated by phpman v4.9.26-5-g7740029 Author: Che Dong Under GNU General Public License
2026-08-14 21:50 @2600:1f28:365:80b0:4d23:66fa:c2bb:7bae
CrawledBy CCBot/2.0 (https://commoncrawl.org/faq/)
Valid XHTML 1.0 Transitional!Valid CSS!