summaryrefslogtreecommitdiff
path: root/install/5.005/DBIx-DBSchema-0.23-5.005kludge/DBSchema/DBD/mysql.pm
blob: f3804dd2858c412eeb09c878d91e7a67ac60ed94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package DBIx::DBSchema::DBD::mysql;

use strict;
use vars qw($VERSION @ISA %typemap);
use DBIx::DBSchema::DBD;

$VERSION = '0.03';
@ISA = qw(DBIx::DBSchema::DBD);

%typemap = (
  'TIMESTAMP'      => 'DATETIME',
  'SERIAL'         => 'INTEGER',
  'BOOL'           => 'TINYINT',
  'LONG VARBINARY' => 'LONGBLOB',
);

=head1 NAME

DBIx::DBSchema::DBD::mysql - MySQL native driver for DBIx::DBSchema

=head1 SYNOPSIS

use DBI;
use DBIx::DBSchema;

$dbh = DBI->connect('dbi:mysql:database', 'user', 'pass');
$schema = new_native DBIx::DBSchema $dbh;

=head1 DESCRIPTION

This module implements a MySQL-native driver for DBIx::DBSchema.

=cut

sub columns {
  my($proto, $dbh, $table ) = @_;
  my $sth = $dbh->prepare("SHOW COLUMNS FROM $table") or die $dbh->errstr;
  $sth->execute or die $sth->errstr;
  map {
    $_->{'Type'} =~ /^(\w+)\(?([\d\,]+)?\)?( unsigned)?$/
      or die "Illegal type: ". $_->{'Type'}. "\n";
    my($type, $length) = ($1, $2);
    [
      $_->{'Field'},
      $type,
      $_->{'Null'},
      $length,
      $_->{'Default'},
      $_->{'Extra'}
    ]
  } @{ $sth->fetchall_arrayref( {} ) };
}

#sub primary_key {
#  my($proto, $dbh, $table ) = @_;
#  my $primary_key = '';
#  my $sth = $dbh->prepare("SHOW INDEX FROM $table")
#    or die $dbh->errstr;
#  $sth->execute or die $sth->errstr;
#  my @pkey = map { $_->{'Column_name'} } grep {
#    $_->{'Key_name'} eq "PRIMARY"
#  } @{ $sth->fetchall_arrayref( {} ) };
#  scalar(@pkey) ? $pkey[0] : '';
#}

sub primary_key {
  my($proto, $dbh, $table) = @_;
  my($pkey, $unique_href, $index_href) = $proto->_show_index($dbh, $table);
  $pkey;
}

sub unique {
  my($proto, $dbh, $table) = @_;
  my($pkey, $unique_href, $index_href) = $proto->_show_index($dbh, $table);
  $unique_href;
}

sub index {
  my($proto, $dbh, $table) = @_;
  my($pkey, $unique_href, $index_href) = $proto->_show_index($dbh, $table);
  $index_href;
}

sub _show_index {
  my($proto, $dbh, $table ) = @_;
  my $sth = $dbh->prepare("SHOW INDEX FROM $table")
    or die $dbh->errstr;
  $sth->execute or die $sth->errstr;

  my $pkey = '';
  my(%index, %unique);
  foreach my $row ( @{ $sth->fetchall_arrayref({}) } ) {
    if ( $row->{'Key_name'} eq 'PRIMARY' ) {
      $pkey = $row->{'Column_name'};
    } elsif ( $row->{'Non_unique'} ) { #index
      push @{ $index{ $row->{'Key_name'} } }, $row->{'Column_name'};
    } else { #unique
      push @{ $unique{ $row->{'Key_name'} } }, $row->{'Column_name'};
    }
  }

  ( $pkey, \%unique, \%index );
}

=head1 AUTHOR

Ivan Kohler <ivan-dbix-dbschema@420.am>

=head1 COPYRIGHT

Copyright (c) 2000 Ivan Kohler
Copyright (c) 2000 Mail Abuse Prevention System LLC
All rights reserved.
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.

=head1 BUGS

=head1 SEE ALSO

L<DBIx::DBSchema>, L<DBIx::DBSchema::DBD>, L<DBI>, L<DBI::DBD>

=cut 

1;