NAME
Module::CoreList::DBSchema - A database schema for Module::CoreList
VERSION
version 0.08
SYNOPSIS
# this requires DBI and DBD::SQLite which are available from CPAN
use strict;
use warnings;
use DBI;
use Module::CoreList::DBSchema;
$|=1;
my $dbh = DBI->connect('dbi:SQLite:dbname=corelist.db','','') or die $DBI::errstr;
$dbh->do(qq{PRAGMA synchronous = OFF}) or die $dbh->errstr;
my $mcdbs = Module::CoreList::DBSchema->new();
# create tables
my %tables = $mcdbs->tables();
print "Creating tables ... ";
foreach my $table ( keys %tables ) {
my $sql = 'CREATE TABLE IF NOT EXISTS ' . $table . ' ( ';
$sql .= join ', ', @{ $tables{$table} };
$sql .= ' )';
$dbh->do($sql) or die $dbh->errstr;
$dbh->do('DELETE FROM ' . $table) or die $dbh->errstr;
}
print "DONE\n";
# populate with data
my @data = $mcdbs->data();
print "Populating tables ... ";
$dbh->begin_work;
foreach my $row ( @data ) {
my $sql = shift @{ $row };
my $sth = $dbh->prepare_cached($sql) or die $dbh->errstr;
$sth->execute( @{ $row } ) or die $dbh->errstr;
}
$dbh->commit;
print "DONE\n";
# done
DESCRIPTION
Module::CoreList::DBSchema provides methods for building a database from the information that is provided by Module::CoreList.
CONSTRUCTOR
new
-
Creates a new Module::CoreList::DBSchema object.
my $mcdbs = Module::CoreList::DBSchema->new();
METHODS
tables
-
In a scalar context returns a hashref data structure keyed on table name.
In a list context returns a list of the same data structure.
my %tables = $mcdbs->tables(); foreach my $table ( keys %tables ) { my $sql = 'CREATE TABLE IF NOT EXISTS ' . $table . ' ( '; $sql .= join ', ', @{ $tables{$table} }; $sql .= ' )'; $dbh->do($sql) or die $dbh->errstr; $dbh->do('DELETE FROM ' . $table) or die $dbh->errstr; }
data
-
In a list context returns a list of arrayrefs which contain a SQL statement as the first element and the remaining elements being bind values for the SQL statement.
In a scalar context returns an arrayref which contains the above arrayrefs.
my @data = $mcdbs->data(); foreach my $row ( @data ) { my $sql = shift @{ $row }; my $sth = $dbh->prepare_cached($sql) or die $dbh->errstr; $sth->execute( @{ $row } ) or die $dbh->errstr; }
You may provide some optional arguments:
prefix, a string to prefix to the table names in the resultant SQL;
queries
-
Returns a list of the available SQL queries.
my @queries = $mcdbs->queries();
query
-
Takes one argument, the name of a query to lookup.
Returns in list context a list consisting of a SQL string and a flag indicating whether the SQL string includes placeholders.
In scalar context returns an array reference containing the same as above.
my $sql = $mcdbs->query('corelist');
SEE ALSO
AUTHOR
Chris Williams
COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Chris Williams.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.