summary refs log tree commit diff
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2009-03-23 17:25:05 +0100
committerfranck cuny <franck@lumberjaph.net>2009-03-23 17:25:05 +0100
commit1448eede680478eef74c51b965815097ef45d02a (patch)
treeac6f16bee23c485a911ac7a9e89fbf57305cec97
downloadcpan-graph-1448eede680478eef74c51b965815097ef45d02a.tar.gz
initial import
-rwxr-xr-xcpan-graph.pl81
-rwxr-xr-xgen-gdf.pl60
-rw-r--r--lib/CPAN/Testers.pm95
-rw-r--r--lib/CPAN/cpants.pm1431
-rw-r--r--lib/CPAN/mapcpan.pm145
5 files changed, 1812 insertions, 0 deletions
diff --git a/cpan-graph.pl b/cpan-graph.pl
new file mode 100755
index 0000000..c2e5324
--- /dev/null
+++ b/cpan-graph.pl
@@ -0,0 +1,81 @@
+#!/usr/bin/perl -w
+use strict;
+use feature ':5.10';
+
+use Getopt::Long;
+
+use lib ( 'lib' );
+use CPAN::Testers;
+use CPAN::cpants;
+use CPAN::mapcpan;
+
+my $options = GetOptions(
+    'dbtest=s' => \my $db_test,
+    'dball=s'  => \my $db_all,
+    'dbout=s'  => \my $db_out,
+);
+
+my $sqltest
+    = CPAN::Testers->connect( "dbi:SQLite:dbname=" . $db_test, '', '' );
+my $sqlall = CPAN::cpants->connect( "dbi:SQLite:dbname=" . $db_all, '', '' );
+my $dbmap = CPAN::cpanmap->connect( "dbi:SQLite:dbname=" . $db_out, "", "" );
+
+$dbmap->deploy;
+
+my $dists = $sqlall->resultset( 'dist' )->search( { is_core => 0 } );
+
+while ( my $dist = $dists->next ) {
+    print "processing ".$dist->package ."... ";
+    my $map_package = $dbmap->resultset( 'packages' )
+        ->find_or_create( { dist => $dist->dist, } );
+
+    my $modules
+        = $sqlall->resultset( 'modules' )->search( { dist => $dist->id } );
+    while ( my $module = $modules->next ) {
+        my $map_module = $dbmap->resultset( 'modules' )->find_or_create(
+            {   module  => $module->module,
+                in_dist => $map_package->id,
+            }
+        );
+    }
+
+    my $tests_pass = $sqltest->resultset( 'reports' )
+        ->count( { distribution => $dist->dist, status => 'PASS' } );
+    my $tests_fail = $sqltest->resultset( 'reports' )
+        ->count( { distribution => $dist->dist, status => 'FAIL' } );
+    my $total_tests = $tests_pass + $tests_fail;
+    $total_tests = 1 if $total_tests == 0;
+    my $tests_success = int( ( $tests_pass / $total_tests ) * 100 );
+
+    my $author = $sqlall->resultset( 'author' )->find( $dist->author );
+    $map_package->update(
+        {   tests_success => $tests_success,
+            author        => $author->pauseid,
+            released      => $dist->released,
+        }
+    );
+
+    my $deps = $sqlall->resultset( 'uses' )->search(
+        {   dist     => $dist->id,
+            in_code  => 1,
+            in_tests => 0
+        }
+    );
+    while ( my $dep = $deps->next ) {
+        my $dist_dep = $sqlall->resultset( 'dist' )->find( $dep->in_dist );
+        next
+            if !defined $dep->in_dist
+                || $dep->in_dist == 0
+                || $dist_dep->is_core;
+        my $pack_dep = $dbmap->resultset( 'packages' )
+            ->find_or_create( { dist => $dist_dep->dist, } );
+        my $node_from = $dbmap->resultset( 'edges' )->create(
+            {   dist_from => $map_package->id,
+                dist_to   => $pack_dep->id
+            }
+        );
+    }
+    say "done";
+}
+
+say "importing CPAN data is terminated";
\ No newline at end of file
diff --git a/gen-gdf.pl b/gen-gdf.pl
new file mode 100755
index 0000000..72ce349
--- /dev/null
+++ b/gen-gdf.pl
@@ -0,0 +1,60 @@
+#!/opt/perl/bin/perl -w
+use strict;
+use feature ':5.10';
+use Getopt::Long;
+
+use lib ( 'lib' );
+use CPAN::mapcpan;
+
+my $options = GetOptions(
+    'out=s'   => \my $output_gdf,
+    'dbmap=s' => \my $db_map
+);
+
+my $dbmap = CPAN::cpanmap->connect( "dbi:SQLite:dbname=" . $db_map, "", "" );
+
+my $array_edges;
+my $hash_nodes;
+
+my $packages = $dbmap->resultset( 'packages' )->search;
+say "create nodes";
+while ( my $package = $packages->next ) {
+    $hash_nodes->{ $package->id } = {
+        tests  => $package->tests_success,
+        name   => $package->dist,
+        author => $package->author,
+        date   => $package->released,
+    };
+}
+
+my $edges = $dbmap->resultset( 'edges' )->search;
+say "create edges";
+while ( my $edge = $edges->next ) {
+    push @$array_edges,
+        {
+        node1    => $edge->dist_from,
+        node2    => $edge->dist_to,
+        directed => 'true',
+        };
+}
+
+#my $out = "nodedef>name VARCHAR,label VARCHAR,tests INTEGER,author VARCHAR,date VARCHAR\n";
+#foreach my $key ( keys %$hash_nodes ) {
+    #$out
+        #.= $key . ","
+        #. $hash_nodes->{ $key }->{ name } . ","
+        #. $hash_nodes->{ $key }->{ tests } . ","
+        #. $hash_nodes->{ $key }->{ author } . ","
+        #. $hash_nodes->{ $key }->{ date } . "\n";
+#}
+#$out .= "edgedef>node1 VARCHAR,node2 VARCHAR,directed BOOLEAN\n";
+#foreach my $edge ( @$array_edges ) {
+    #$out
+        #.= $edge->{ node1 } . ","
+        #. $edge->{ node2 } . ","
+        #. $edge->{ directed } . "\n";
+#}
+
+#open my $fh_gdf, '>', $output_gdf or die $!;
+#print $fh_gdf $out;
+#close $fh_gdf;
\ No newline at end of file
diff --git a/lib/CPAN/Testers.pm b/lib/CPAN/Testers.pm
new file mode 100644
index 0000000..2159ba7
--- /dev/null
+++ b/lib/CPAN/Testers.pm
@@ -0,0 +1,95 @@
+package CPAN::Testers::reports;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components(qw/ Core/);
+__PACKAGE__->table('reports');
+
+
+__PACKAGE__->add_columns(
+    'id' => {
+      'data_type' => 'INTEGER',
+      'is_auto_increment' => 0,
+      'default_value' => undef,
+      'is_foreign_key' => 0,
+      'name' => 'id',
+      'is_nullable' => 0,
+      'size' => 0
+    },
+    'status' => {
+      'data_type' => 'TEXT',
+      'is_auto_increment' => 0,
+      'default_value' => undef,
+      'is_foreign_key' => 0,
+      'name' => 'status',
+      'is_nullable' => 1,
+      'size' => 0
+    },
+    'distribution' => {
+      'data_type' => 'TEXT',
+      'is_auto_increment' => 0,
+      'default_value' => undef,
+      'is_foreign_key' => 0,
+      'name' => 'distribution',
+      'is_nullable' => 1,
+      'size' => 0
+    },
+    'version' => {
+      'data_type' => 'TEXT',
+      'is_auto_increment' => 0,
+      'default_value' => undef,
+      'is_foreign_key' => 0,
+      'name' => 'version',
+      'is_nullable' => 1,
+      'size' => 0
+    },
+    'perl' => {
+      'data_type' => 'TEXT',
+      'is_auto_increment' => 0,
+      'default_value' => undef,
+      'is_foreign_key' => 0,
+      'name' => 'perl',
+      'is_nullable' => 1,
+      'size' => 0
+    },
+    'osname' => {
+      'data_type' => 'TEXT',
+      'is_auto_increment' => 0,
+      'default_value' => undef,
+      'is_foreign_key' => 0,
+      'name' => 'osname',
+      'is_nullable' => 1,
+      'size' => 0
+    },
+    'osvers' => {
+      'data_type' => 'TEXT',
+      'is_auto_increment' => 0,
+      'default_value' => undef,
+      'is_foreign_key' => 0,
+      'name' => 'osvers',
+      'is_nullable' => 1,
+      'size' => 0
+    },
+    'archname' => {
+      'data_type' => 'TEXT',
+      'is_auto_increment' => 0,
+      'default_value' => undef,
+      'is_foreign_key' => 0,
+      'name' => 'archname',
+      'is_nullable' => 1,
+      'size' => 0
+    },
+);
+__PACKAGE__->set_primary_key('id');
+
+
+
+package CPAN::Testers;
+use base 'DBIx::Class::Schema';
+use strict;
+use warnings;
+
+__PACKAGE__->register_class('reports', 'CPAN::Testers::reports');
+
+1;
diff --git a/lib/CPAN/cpants.pm b/lib/CPAN/cpants.pm
new file mode 100644
index 0000000..686c834
--- /dev/null
+++ b/lib/CPAN/cpants.pm
@@ -0,0 +1,1431 @@
+package CPAN::cpants::prereq;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'prereq' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'requires' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'requires',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'version' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'version',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'in_dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'in_dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'is_prereq' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'is_prereq',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'is_build_prereq' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'is_build_prereq',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'is_optional_prereq' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'is_optional_prereq',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+);
+__PACKAGE__->set_primary_key( 'id' );
+
+package CPAN::cpants::modules;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'modules' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'module' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'module',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'file' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'in_lib' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'in_lib',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'in_basedir' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'in_basedir',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'is_core' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'is_core',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+);
+__PACKAGE__->set_primary_key( 'id' );
+
+package CPAN::cpants::kwalitee;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'kwalitee' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'abs_kw' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'abs_kw',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'abs_core_kw' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'abs_core_kw',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'kwalitee' => {
+        'data_type'         => 'numeric',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'kwalitee',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'rel_core_kw' => {
+        'data_type'         => 'numeric',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'rel_core_kw',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'extractable' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'extractable',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'extracts_nicely' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'extracts_nicely',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_version' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_version',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_proper_version' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_proper_version',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'no_cpants_errors' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'no_cpants_errors',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_readme' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_readme',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_manifest' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_manifest',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_meta_yml' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_meta_yml',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_buildtool' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_buildtool',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_changelog' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_changelog',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'no_symlinks' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'no_symlinks',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_tests' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_tests',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'proper_libs' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'proper_libs',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'is_prereq' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'is_prereq',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'use_strict' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'use_strict',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'use_warnings' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'use_warnings',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_test_pod' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_test_pod',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_test_pod_coverage' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_test_pod_coverage',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'no_pod_errors' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'no_pod_errors',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_working_buildtool' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_working_buildtool',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'manifest_matches_dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'manifest_matches_dist',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_example' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_example',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'buildtool_not_executable' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'buildtool_not_executable',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_humanreadable_license' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_humanreadable_license',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'metayml_is_parsable' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'metayml_is_parsable',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'metayml_conforms_spec_current' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'metayml_conforms_spec_current',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'metayml_has_license' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'metayml_has_license',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'metayml_conforms_to_known_spec' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'metayml_conforms_to_known_spec',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_license' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_license',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'prereq_matches_use' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'prereq_matches_use',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'build_prereq_matches_use' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'build_prereq_matches_use',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'no_generated_files' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'no_generated_files',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'run' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'run',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'has_version_in_each_file' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_version_in_each_file',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_tests_in_t_dir' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_tests_in_t_dir',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'no_stdin_for_prompting' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'no_stdin_for_prompting',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'easily_repackageable_by_fedora' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'easily_repackageable_by_fedora',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'easily_repackageable_by_debian' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'easily_repackageable_by_debian',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'easily_repackageable' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'easily_repackageable',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'fits_fedora_license' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'fits_fedora_license',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'metayml_declares_perl_version' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'metayml_declares_perl_version',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'no_large_files' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'no_large_files',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'has_separate_license_file' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_separate_license_file',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_license_in_source_file' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_license_in_source_file',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'metayml_has_provides' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'metayml_has_provides',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'uses_test_nowarnings' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'uses_test_nowarnings',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'latest_version_distributed_by_debian' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'latest_version_distributed_by_debian',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_no_bugs_reported_in_debian' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_no_bugs_reported_in_debian',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'has_no_patches_in_debian' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'has_no_patches_in_debian',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'distributed_by_debian' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'distributed_by_debian',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+);
+__PACKAGE__->set_primary_key( 'id' );
+
+package CPAN::cpants::uses;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'uses' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'module' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'module',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'in_dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'in_dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'in_code' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'in_code',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'in_tests' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'in_tests',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+);
+__PACKAGE__->set_primary_key( 'id' );
+
+package CPAN::cpants::dist;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'dist' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'run' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'run',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'dist' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'package' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'package',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'vname' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'vname',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'author' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'author',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'version' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'version',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'version_major' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'version_major',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'version_minor' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'version_minor',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'extension' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'extension',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'extractable' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'extractable',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'extracts_nicely' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'extracts_nicely',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'size_packed' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'size_packed',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'size_unpacked' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'size_unpacked',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'released' => {
+        'data_type'         => 'date',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'released',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'files' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'files',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'files_list' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'files_list',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'dirs' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dirs',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dirs_list' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dirs_list',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'symlinks' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'symlinks',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'symlinks_list' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'symlinks_list',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'bad_permissions' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'bad_permissions',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'bad_permissions_list' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'bad_permissions_list',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'file_makefile_pl' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_makefile_pl',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_build_pl' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_build_pl',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_readme' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_readme',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'file_manifest' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_manifest',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_meta_yml' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_meta_yml',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_signature' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_signature',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_ninja' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_ninja',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_test_pl' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_test_pl',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_changelog' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_changelog',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'dir_lib' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dir_lib',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dir_t' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dir_t',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dir_xt' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dir_xt',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'broken_module_install' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'broken_module_install',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'manifest_matches_dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'manifest_matches_dist',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'buildfile_executable' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'buildfile_executable',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'license' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'license',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'metayml_is_parsable' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'metayml_is_parsable',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_license' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_license',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'needs_compiler' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'needs_compiler',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'got_prereq_from' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'got_prereq_from',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'is_core' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'is_core',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file__build' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file__build',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_build' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_build',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_makefile' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_makefile',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_blib' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_blib',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'file_pm_to_blib' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_pm_to_blib',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'stdin_in_makefile_pl' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'stdin_in_makefile_pl',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'stdin_in_build_pl' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'stdin_in_build_pl',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'external_license_file' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'external_license_file',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'file_licence' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'file_licence',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'licence_file' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'licence_file',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'license_file' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'license_file',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'license_type' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'license_type',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'no_index' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'no_index',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'ignored_files_list' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'ignored_files_list',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'license_in_pod' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'license_in_pod',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'license_from_yaml' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'license_from_yaml',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'license_from_external_license_file' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'license_from_external_license_file',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'test_files_list' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'test_files_list',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+);
+__PACKAGE__->set_primary_key( 'id' );
+
+package CPAN::cpants::author;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'author' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'pauseid' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'pauseid',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'name' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'name',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'email' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'email',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'average_kwalitee' => {
+        'data_type'         => 'numeric',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'average_kwalitee',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'num_dists' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'num_dists',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'rank' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'rank',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'prev_av_kw' => {
+        'data_type'         => 'numeric',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'prev_av_kw',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'prev_rank' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'prev_rank',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'average_total_kwalitee' => {
+        'data_type'         => 'numeric',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'average_total_kwalitee',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+);
+__PACKAGE__->set_primary_key( 'id' );
+
+package CPAN::cpants;
+use base 'DBIx::Class::Schema';
+use strict;
+use warnings;
+
+__PACKAGE__->register_class( 'prereq', 'CPAN::cpants::prereq' );
+
+__PACKAGE__->register_class( 'modules', 'CPAN::cpants::modules' );
+
+__PACKAGE__->register_class( 'kwalitee', 'CPAN::cpants::kwalitee' );
+
+__PACKAGE__->register_class( 'uses', 'CPAN::cpants::uses' );
+
+__PACKAGE__->register_class( 'dist', 'CPAN::cpants::dist' );
+
+__PACKAGE__->register_class( 'author', 'CPAN::cpants::author' );
+
+1;
diff --git a/lib/CPAN/mapcpan.pm b/lib/CPAN/mapcpan.pm
new file mode 100644
index 0000000..7dcd13e
--- /dev/null
+++ b/lib/CPAN/mapcpan.pm
@@ -0,0 +1,145 @@
+package CPAN::cpanmap::edges;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'edges' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dist_from' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dist_from',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dist_to' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dist_to',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+);
+__PACKAGE__->set_primary_key('id');
+
+package CPAN::cpanmap::packages;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'packages' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'dist' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'tests_success' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => 0,
+        'is_foreign_key'    => 0,
+        'name'              => 'tests_success',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'author' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'author',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'released' => {
+        'data_type'         => 'date',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'released',
+        'is_nullable'       => 1,
+        'size'              => 0
+    }
+);
+__PACKAGE__->set_primary_key('id');
+
+package CPAN::cpanmap::modules;
+use base 'DBIx::Class';
+use strict;
+use warnings;
+
+__PACKAGE__->load_components( qw/ Core/ );
+__PACKAGE__->table( 'modules' );
+
+__PACKAGE__->add_columns(
+    'id' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'id',
+        'is_nullable'       => 0,
+        'size'              => 0
+    },
+    'module' => {
+        'data_type'         => 'text',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'module',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+    'in_dist' => {
+        'data_type'         => 'integer',
+        'is_auto_increment' => 0,
+        'default_value'     => undef,
+        'is_foreign_key'    => 0,
+        'name'              => 'in_dist',
+        'is_nullable'       => 1,
+        'size'              => 0
+    },
+);
+__PACKAGE__->set_primary_key('id');
+
+package CPAN::cpanmap;
+use base 'DBIx::Class::Schema';
+use strict;
+use warnings;
+
+__PACKAGE__->register_class( 'edges',    'CPAN::cpanmap::edges' );
+__PACKAGE__->register_class( 'packages', 'CPAN::cpanmap::packages' );
+__PACKAGE__->register_class( 'modules',  'CPAN::cpanmap::modules' );
+
+1;