NAME

Class::PObject::Driver::DBM - Base class for DBM-related pobject drivers

SYNOPSIS

use Class::PObject::Driver::DBM;
@ISA = ('Class::PObject::Driver::DBM');

sub dbh {
    my ($self, $pobject_name, $properties) = @_;
    ...
}

ABSTRACT

Class::PObject::Driver::DBM is a base class for all the DBM-related
pobject drivers. Class::PObject::Driver::DBM is a direct subclass of
Class::PObject::Driver.

DESCRIPTION

Class::PObject::Driver::DBM is a direct subclass of Class::PObject::Driver, and provides all the necessary methods common for DBM-related disk access.

METHODS

Refer to Class::PObject::Driver for the details of all the driver-specific methods. Class::PObject::Driver::DBM overrides save(), load() and remove() methods with the versions relevant to DBM-related disk access.

  • dbh($self, $pobject_name, \%properties, $lock_type) - called whenever base methods need database tied hash. DBM drivers should provide this method, which should return an array of elements, namely $DB - an DBM object, usually returned from tie() or tied() functions; $dbh - a hash tied to database; $unlock - an action required for unlocking the database. $unlock should be a reference to a subroutine, which when called should release the lock.

    Currently base methods ignore $DB, but it may change in the future.

  • _filename($self, $pobject_name, \%properties) - returns a name of the file to connect to. It first looks for $properties-{datasource}> and if it exists, uses the value as a directory name object file should be created in. If it's missing, defaults to systems temporary folder.

    It then returns a file name derived out of $pobject_name inside this directory.

  • _lock($file, $filename, $lock_type) - acquires either shared or exclusive lock depending on the $lock_type, which can be either of w or r.

    Returns a reference to an action (subroutine), which perform unlocking for this particular lock. On failure returns undef. _lock() is usually called from within dbh(), and return value is returned together with database handles.

NOTES

Currently the only record index is the id column. By introducing configurable indexes, object selections (through load() method) can be improved tremendously. Syntax similar to the following may suffice:

pobject Article => {
    columns         => ['id', 'title', 'author', 'content'],
    indexes         => ['title', 'author'],
    driver          => 'db_file',
    datasource      => './data'
}
    

This issue is to be addressed in subsequent releases.

SEE ALSO

Class::PObject::Driver, Class::PObject::Driver::DB_File Class::PObject::Driver::DBI

COPYRIGHT AND LICENSE

For author and copyright information refer to Class::PObject's online manual.