App-CPANIDX

 view release on metacpan or  search on metacpan

lib/App/CPANIDX/Tables.pm  view on Meta::CPAN

package App::CPANIDX::Tables;

use strict;
use warnings;
use Module::CoreList::DBSchema;
use vars qw[$VERSION];

$VERSION = '0.40';

my $mcdbs = Module::CoreList::DBSchema->new();
my %cl_tables = $mcdbs->tables();

my $tables = {
   mods => [
      'mod_name VARCHAR(300) NOT NULL',
      'dist_name VARCHAR(190) NOT NULL',
      'dist_vers VARCHAR(50)',
      'cpan_id VARCHAR(20) NOT NULL',
      'mod_vers VARCHAR(30)',
    ],
   dists => [
      'dist_name VARCHAR(190) NOT NULL',
      'cpan_id VARCHAR(20) NOT NULL',
      'dist_file VARCHAR(400) NOT NULL',
      'dist_vers VARCHAR(50)',
    ],
   auths => [
      'cpan_id VARCHAR(20) NOT NULL',
      'fullname VARCHAR(255) NOT NULL',
      'email TEXT',
    ],
   timestamp => [
      'timestamp VARCHAR(30) NOT NULL',
      'lastupdated VARCHAR(30) NOT NULL',
   ],
   mirrors => [
      'hostname VARCHAR(50) NOT NULL',
      'dst_bandwidth VARCHAR(50)',
      'dst_contact VARCHAR(60)',
      'dst_ftp VARCHAR(250)',
      'dst_http VARCHAR(250)',
      'dst_location TEXT',
      'dst_notes TEXT',
      'dst_organisation TEXT',
      'dst_rsync VARCHAR(250)',
      'dst_src VARCHAR(250)',
      'dst_timezone VARCHAR(20)',
      'frequency VARCHAR(100)',
   ],
   perms => [
      'mod_name VARCHAR(300) NOT NULL',
      'cpan_id VARCHAR(20) NOT NULL',
      'perm VARCHAR(20)',
   ],
   %cl_tables,
};

my $indexes = {
    mods => [
      'CREATE INDEX mods_mod_name ON mods ( mod_name )',
      'CREATE INDEX mods_dist_name ON mods ( dist_name )',
      'CREATE INDEX mods_dist_vers ON mods ( dist_vers )',
      'CREATE INDEX mods_all ON mods ( mod_name, dist_name, dist_vers )',
    ],
    dists => [
      'CREATE INDEX dists_dist_name ON dists ( dist_name )',
      'CREATE INDEX dists_dist_vers ON dists ( dist_vers )',
      'CREATE INDEX dists_cpan_id ON dists ( cpan_id )',
      'CREATE INDEX dists_all ON dists ( dist_name, dist_vers )',
    ],
    auths => [
      'CREATE INDEX auths_cpan_id ON auths ( cpan_id )',
    ],
    perms => [
      'CREATE INDEX perms_mod_name ON perms ( mod_name )',
      'CREATE INDEX perms_cpan_id ON perms ( cpan_id )',
    ],
};

# make the temp mappings
foreach my $k ( qw( mirrors mods dists auths perms ), keys %cl_tables ) {
  $tables->{ 'tmp_' . $k } = $tables->{ $k };
}

sub table {
  return unless @_;
  my $table = shift;
  $table = shift if $table->isa(__PACKAGE__);
  return unless $table;
  return unless exists $tables->{ $table };
  my $sql = 'CREATE TABLE IF NOT EXISTS ' . $table . ' ( ';
  $sql .= join ', ', @{ $tables->{$table} };
  $sql .= ' )';
  return $sql;



( run in 0.495 second using v1.01-cache-2.11-cpan-d8267643d1d )