Skip to content

Commit

Permalink
Added App::CPANIDX::Tables module
Browse files Browse the repository at this point in the history
  • Loading branch information
bingos committed Mar 8, 2010
1 parent e7cb1d3 commit 3da66bd
Show file tree
Hide file tree
Showing 9 changed files with 146 additions and 31 deletions.
16 changes: 16 additions & 0 deletions Changes
@@ -1,3 +1,19 @@
==============================
2010-03-05 22:48:51 +0000 0.04
==============================

commit e7cb1d37370638858d03b4f7d5b6919ee0eb340b
Author: Chris Williams <chris@bingosnet.co.uk>
Date: Fri Mar 5 22:48:51 2010 +0000

Fixed compile error

commit f96c1ab41925d8b12885d3c341539637b219e7a2
Author: Chris Williams <chris@bingosnet.co.uk>
Date: Fri Mar 5 22:39:03 2010 +0000

Refactored stuff into modules

==============
End of Excerpt
==============
2 changes: 2 additions & 0 deletions MANIFEST
Expand Up @@ -19,6 +19,7 @@ inc/Module/Install/WriteAll.pm
lib/App/CPANIDX.pm
lib/App/CPANIDX/Queries.pm
lib/App/CPANIDX/Renderer.pm
lib/App/CPANIDX/Tables.pm
LICENSE
Makefile.PL
MANIFEST This list of files
Expand All @@ -27,6 +28,7 @@ README
t/00_compile.t
t/01_renderer.t
t/02_queries.t
t/03_tables.t
t/99_pod.t
t/99_pod_coverage.t
tools/git-log.pl
29 changes: 2 additions & 27 deletions bin/cpanidx-gendb
Expand Up @@ -2,6 +2,7 @@

use strict;
use warnings;
use App::CPANIDX::Tables;
use DBI;
use URI;
use Config::Tiny;
Expand Down Expand Up @@ -33,30 +34,6 @@ die "No 'url' was specified in the config file '$config', aborting\n" unless $ur

$|=1;

my $tables = {
mods => [
'mod_name VARCHAR(300) NOT NULL',
'dist_name VARCHAR(190) NOT NULL',
'dist_vers VARCHAR(20)',
'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(20)',
],
auths => [
'cpan_id VARCHAR(20) NOT NULL',
'fullname VARCHAR(60) NOT NULL',
'email TEXT',
],
timestamp => [
'timestamp VARCHAR(30) NOT NULL',
],
};

my $packages_file = '02packages.details.txt.gz';
my $mailrc_file = '01mailrc.txt.gz';

Expand Down Expand Up @@ -84,9 +61,7 @@ sub timestamp {
sub create_table {
my $handle = shift;
my $table = shift;
my $sql = 'CREATE TABLE IF NOT EXISTS ' . $table . ' ( ';
$sql .= join ', ', @{ $tables->{$table} };
$sql .= ' )';
my $sql = App::CPANIDX::Tables->table( $table );
$handle->do($sql) or die $handle->errstr;
$handle->do('DELETE FROM ' . $table) or die $handle->errstr;
return 1;
Expand Down
2 changes: 1 addition & 1 deletion lib/App/CPANIDX.pm
Expand Up @@ -5,7 +5,7 @@ use warnings;

use vars qw($VERSION);

$VERSION = '0.04';
$VERSION = '0.06';

1;

Expand Down
2 changes: 1 addition & 1 deletion lib/App/CPANIDX/Queries.pm
Expand Up @@ -4,7 +4,7 @@ use strict;
use warnings;
use vars qw[$VERSION];

$VERSION = '0.04';
$VERSION = '0.06';

my %queries = (
'mod' => [ 'select mods.mod_name,mods.mod_vers,mods.cpan_id,dists.dist_name,dists.dist_vers,dists.dist_file from mods,dists where mod_name = ? and mods.dist_name = dists.dist_name and mods.dist_vers = dists.dist_vers', 1 ],
Expand Down
2 changes: 1 addition & 1 deletion lib/App/CPANIDX/Renderer.pm
Expand Up @@ -8,7 +8,7 @@ use XML::Simple;
use HTML::Tiny;
use vars qw[$VERSION];

$VERSION = '0.04';
$VERSION = '0.06';

my %types = (
'yaml', 'application/x-yaml; charset=utf-8',
Expand Down
97 changes: 97 additions & 0 deletions lib/App/CPANIDX/Tables.pm
@@ -0,0 +1,97 @@
package App::CPANIDX::Tables;

use strict;
use warnings;
use vars qw[$VERSION];

$VERSION = '0.06';

my $tables = {
mods => [
'mod_name VARCHAR(300) NOT NULL',
'dist_name VARCHAR(190) NOT NULL',
'dist_vers VARCHAR(20)',
'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(20)',
],
auths => [
'cpan_id VARCHAR(20) NOT NULL',
'fullname VARCHAR(60) NOT NULL',
'email TEXT',
],
timestamp => [
'timestamp VARCHAR(30) NOT NULL',
],
};

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;
}

sub tables {
return sort keys %{ $tables };
}

1;

__END__
=head1 NAME
App::CPANIDX::Tables - Provide table definitions for App::CPANIDX
=head1 SYNOPSIS
my @tables = App::CPANIDX::Tables->tables();
my $sql = App::CPANIDX::Tables->table('dists');
=head1 DESCRIPTION
App::CPANIDX::Tables provides the SQL to create the tables that App::CPANIDX uses.
=head1 FUNCTIONS
=over
=item C<tables>
Returns a list of the available tables.
=item C<table>
Takes one argument, the name of a table to lookup.
Returns a SQL statement that can be used to create the table.
=back
=head1 AUTHOR
Chris C<BinGOs> Williams <chris@bingosnet.co.uk>
=head1 LICENSE
Copyright E<copy> 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.
=head1 SEE ALSO
L<App::CPANIDX>
=cut
3 changes: 2 additions & 1 deletion t/00_compile.t
@@ -1,4 +1,5 @@
use Test::More tests => 3;
use Test::More tests => 4;
use_ok('App::CPANIDX');
use_ok('App::CPANIDX::Renderer');
use_ok('App::CPANIDX::Queries');
use_ok('App::CPANIDX::Tables');
24 changes: 24 additions & 0 deletions t/03_tables.t
@@ -0,0 +1,24 @@
use strict;
use warnings;
use Test::More;

my $tests = {
auths => 'CREATE TABLE IF NOT EXISTS auths ( cpan_id VARCHAR(20) NOT NULL, fullname VARCHAR(60) NOT NULL, email TEXT )',
dists => 'CREATE TABLE IF NOT EXISTS dists ( dist_name VARCHAR(190) NOT NULL, cpan_id VARCHAR(20) NOT NULL, dist_file VARCHAR(400) NOT NULL, dist_vers VARCHAR(20) )',
mods => 'CREATE TABLE IF NOT EXISTS mods ( mod_name VARCHAR(300) NOT NULL, dist_name VARCHAR(190) NOT NULL, dist_vers VARCHAR(20), cpan_id VARCHAR(20) NOT NULL, mod_vers VARCHAR(30) )',
timestamp => 'CREATE TABLE IF NOT EXISTS timestamp ( timestamp VARCHAR(30) NOT NULL )',
};

plan tests => 2 + ( scalar keys %$tests );

use_ok('App::CPANIDX::Tables');

my @origs = sort keys %$tests;
my @types = sort App::CPANIDX::Tables->tables();

is_deeply( \@origs, \@types, 'We got the right tables back' );

foreach my $table ( sort keys %$tests ) {
my $sql = App::CPANIDX::Tables->table( $table );
is( $sql, $tests->{$table}, qq{SQL for '$table' is correct} );
}

0 comments on commit 3da66bd

Please sign in to comment.