NAME
CPAN::SQLite - maintain and search a minimal CPAN database
SYNOPSIS
my $obj = CPAN::SQLite->new(CPAN => '/path/to/CPAN');
$obj->index(setup => 1);
$obj->query(mode => 'dist', name => 'CPAN');
my $results = $obj->{results};
DESCRIPTION
This package is used for setting up, maintaining, and searching a CPAN database consisting of the information stored in the three main CPAN indices: $CPAN/modules/03modlist.data.gz, $CPAN/modules/02packages.details.txt.gz, and $CPAN/authors/01mailrc.txt.gz.
One begins by creating the object as
my $obj = CPAN::SQLite->new(%args);
which accepts the following arguments:
CPAN => '/path/to/CPAN'
This specifies the path to where the index files are to be stored. This could be a local CPAN mirror, defined here by the presence of a MIRRORED.BY file beneath this directory, or a local directory in which to store these files from a remote CPAN mirror. In the latter case, the index files are fetched from a remote CPAN mirror, using the same list that
CPAN.pm
uses, if this is configured, and are updated if they are more than one day old.If the
CPAN
option is not given, it will default tocpan_home
of CPAN, if this is configured, with the index files found underkeep_source_where
. A fatal error results if such a directory isn't found. Updates to these index files are assumed here to be handled byCPAN.pm
.db_name => 'cpan-sqlite'
This is the name of the database that
DBD::SQLite
will use. If not given, this defaults tocpandb-sqlite
.db_dir => '/path/to/db/dir'
This specifies the path to where the database file is found. If not given, it defaults to the
cpan_home
directory ofCPAN.pm
, if present, or to the directory in which the script was invoked.
There are two main methods available.
$obj->index(%args);
This is used to set up and maintain the database. The following arguments are accepted:
setup => 1
This specifies that the database is to be created and populated from the CPAN indices; any exisiting database will be overwritten. Not specifying this option will assume that an existing database is to be updated.
reindex => 'dist_name'
This specifies that the CPAN distribution
dist_name
is to be reindexed.
$obj->query(%args);
This is used for querying the database by distribution name, module name, or CPAN author name. There are two arguments needed to specify such queries.
mode => some_value
This specifies what type of query to perform, with
mode
being one ofdist
,module
, orauthor
, for searching through, respectively, CPAN distribution names, module names, or author names and CPAN ids.type => query_term
This specifies the query term for the search, with
type
being one ofname
, to search for an exact match, orsearch
, for searching for partial matches. Perl regular expressions are supported in thequery_term
for thesearch
option.
As well, an option of max_results => some_number
will limit the number of results returned; if not specified, this defaults to 200.
CPAN.pm support
As of CPAN.pm version 1.88_65, there is experimental support within CPAN.pm for using CPAN::SQLite to obtain information on packages, modules, and authors. One goal of this is to reduce the memory footprint of the CPAN.pm shell, as this information is no longer all preloaded into memory. This can be enabled through
perl -MCPAN -e shell
cpan> o conf use_sqlite 1
Use
cpan> o conf commit
to save this setting for future sessions.
Using CPAN::SQLite, what happens is that a request for information through CPAN.pm, such as
cpan> a ANDK
will cause a query to the SQLite database to be made. If successful, this will place the relevant data for this request into the data structure CPAN.pm uses to store and retrieve such information. Thus, at any given time, the only information CPAN.pm stores in memory is that for packages, modules, and authors for which previous queries have been made. There are certain requests, such as
cpan> r
to make a list of recommended packages for which upgrades on CPAN are available, which will result in loading information on all available packages into memory; if such a query is made, the subsequent memory footprint of CPAN.pm with and without CPAN::SQLite will be essentially the same.
The database itself, called cpandb-sqlite, will be stored in the location specified by $CPAN::Config->{cpan_home}
. When first started, this database will be created, and afterwards, it will be updated if the database is older than one day since the last update. A log file of the creation or update process, called cpan_search_log.dddddddddd, will be created in the same directory as the database file.
SEE ALSO
CPAN::SQLite::Index, for setting up and maintaining the database, and CPAN::SQLite::Search for an interface to querying the database. Some details of the interaction with CPAN is available from CPAN::SQLite::META. See also the cpandb script for a command-line interface to the indexing and querying of the database.
Development takes place on the CPAN-Search-Lite project at http://sourceforge.net/projects/cpan-search/.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc CPAN::SQLite
You can also look for information at:
AnnoCPAN: Annotated CPAN documentation
CPAN::Forum: Discussion forum
CPAN Ratings
RT: CPAN's request tracker
Search CPAN
COPYRIGHT
This software is copyright 2006 by Randy Kobes <r.kobes@uwinnipeg.ca>. Use and redistribution are under the same terms as Perl itself.