package Class::DBI::Loader::DB2;
use strict;
use DBI;
use Carp ();
require Class::DBI::DB2;
require Class::DBI::Loader::Generic;
use base qw(Class::DBI::Loader::Generic);
use vars qw($VERSION);

$VERSION = '0.13';

sub _croak { require Carp; Carp::croak(@_); }
sub _load_classes {
    my $self = shift;
    my $dbh = DBI->connect(@{$self->_datasource}) or _croak($DBI::errstr);
#    foreach my $table($dbh->tables( {'TABLE_TYPE' => 'TABLE'} ) {
    foreach my $table($dbh->tables) {
        if ($table !~ /SYSCAT/ && $table !~ /SYSIBM/ && $table !~ /SYSSTAT/) {
          my $sth = $dbh->prepare(<<"SQL");
SELECT c.COLNAME FROM SYSCAT.KEYCOLUSE kc, SYSCAT.TABCONST tc,  SYSCAT.COLUMNS c
WHERE kc.CONSTNAME=tc.CONSTNAME AND kc.TABSCHEMA=tc.TABSCHEMA
AND kc.TABNAME=tc.TABNAME AND kc.TABSCHEMA=c.TABSCHEMA AND
kc.TABNAME=c.TABNAME AND kc.COLNAME=c.COLNAME AND kc.TABSCHEMA = ? AND
kc.TABNAME = ? AND tc.TYPE = 'P' ORDER BY kc.COLSEQ
SQL
          my ($tabschema,$tbl) = split '\.', $table;
          $sth->execute( uc($tabschema), uc($tbl) );
          my $primaries = $sth->fetchall_arrayref;
          $sth->finish;
          my ( @primary );
          map { push @primary, $_ } @$primaries;

          if ( @primary ) {
	    my $class = $self->_table2class($table);
	    no strict 'refs';
	    @{"$class\::ISA"} = qw(Class::DBI::DB2);
	    $class->set_db(Main => @{$self->_datasource});
	    $class->set_up_table($table);
	    $self->{CLASSES}->{$table} = $class;
          }
        }
    }
    $dbh->disconnect;
}

1;

__END__

=head1 NAME

Class::DBI::Loader::DB2 - Class::DBI::Loader DB2 implementation.

=head1 SYNOPSIS

  use Class::DBI::Loader;

  # $loader is a Class::DBI::Loader::DB2
  my $loader = Class::DBI::Loader->new(
    dsn => "dbi:DB2:dbname",
    user => "root",
    password => "",
    namespace => "Data",
  );
  my $class = $loader->find_class('film'); # $class => Data::Film
  my $obj = $class->retrieve(1);

=head1 DESCRIPTION

please see L<Class::DBI::Loader>

=head1 AUTHOR

Mark Ferris E<lt>mark.ferris@geac.comE<gt>

=head1 COPYRIGHT

Copyright (C) 2004 Mark Ferris. All rights reserved.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=head1 SEE ALSO

L<Class::DBI::Loader>

=cut
