The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME
    Module::CoreList::DBSchema - A database schema for Module::CoreList

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');

AUTHOR
    Chris "BinGOs" Williams <chris@bingosnet.co.uk>

LICENSE
    Copyright © Chris Williams

    This module may be used, modified, and distributed under the same terms
    as Perl itself. Please see the license that came with your Perl
    distribution for details.

SEE ALSO
    Module::CoreList

    DBI