1 package DBIx::Class::Schema::Loader::DB2;
4 use base 'DBIx::Class::Schema::Loader::Generic';
10 DBIx::Class::Schema::Loader::DB2 - DBIx::Class::Schema::Loader DB2 Implementation.
14 use DBIx::Schema::Class::Loader;
16 # $loader is a DBIx::Class::Schema::Loader::DB2
17 my $loader = DBIx::Class::Schema::Loader->new(
18 dsn => "dbi:DB2:dbname",
28 See L<DBIx::Class::Schema::Loader>.
39 my $db_schema = uc ($args{db_schema} || '');
40 my $dbh = $class->storage->dbh;
42 # this is split out to avoid version parsing errors...
43 my $is_dbd_db2_gte_114 = ( $DBD::DB2::VERSION >= 1.14 );
44 my @tables = $is_dbd_db2_gte_114 ?
45 $dbh->tables( { TABLE_SCHEM => '%', TABLE_TYPE => 'TABLE,VIEW' } )
47 # People who use table or schema names that aren't identifiers deserve
48 # what they get. Still, FIXME?
50 @tables = grep {!/^SYSIBM\./ and !/^SYSCAT\./ and !/^SYSSTAT\./} @tables;
51 @tables = grep {/^$db_schema\./} @tables if($db_schema);
56 my ( $class, $table ) = @_;
58 # print "_table_info($table)\n";
59 my ($db_schema, $tabname) = split /\./, $table, 2;
60 # print "DB_Schema: $db_schema, Table: $tabname\n";
62 # FIXME: Horribly inefficient and just plain evil. (JMM)
63 my $dbh = $class->storage->dbh;
64 $dbh->{RaiseError} = 1;
66 my $sth = $dbh->prepare(<<'SQL') or die;
68 FROM SYSCAT.COLUMNS as c
69 WHERE c.TABSCHEMA = ? and c.TABNAME = ?
72 $sth->execute($db_schema, $tabname) or die;
73 my @cols = map { @$_ } @{$sth->fetchall_arrayref};
75 $sth = $dbh->prepare(<<'SQL') or die;
77 FROM SYSCAT.TABCONST as tc
78 JOIN SYSCAT.KEYCOLUSE as kcu ON tc.constname = kcu.constname
79 WHERE tc.TABSCHEMA = ? and tc.TABNAME = ? and tc.TYPE = 'P'
82 $sth->execute($db_schema, $tabname) or die;
84 my @pri = map { @$_ } @{$sth->fetchall_arrayref};
86 return ( \@cols, \@pri );
91 L<DBIx::Class::Schema::Loader>