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

Module::CoreList

DBI

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.