/usr/share/perl5/Class/DBI/Lite/mysql.pm is in libclass-dbi-lite-perl 1.026-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | package Class::DBI::Lite::mysql;
use strict;
use warnings 'all';
use base 'Class::DBI::Lite';
use Class::DBI::Lite::TableInfo;
use Carp 'confess';
#==============================================================================
sub set_up_table
{
my $s = shift;
# Get our columns:
my $table = shift;
$s->_init_meta( $table );
$s->after_set_up_table;
1;
}# end set_up_table()
#==============================================================================
sub get_tables
{
my ($s, $schema) = @_;
($schema) = $schema =~ m/DBI\:mysql\:([^:]+)/;
my $sth = $s->db_Main->prepare(<<"");
select table_name
from information_schema.tables
where table_schema = ?
and table_type = 'BASE TABLE'
$sth->execute( $schema );
my @out = ( );
while( my ($name) = $sth->fetchrow )
{
push @out, $name;
}# end while()
$sth->finish();
@out ? return @out : return;
}# end get_tables()
#==============================================================================
sub get_meta_columns
{
my ($s, $schema, $table) = @_;
($schema) = $schema =~ m/DBI\:mysql\:([^:]+)/;
# Get our columns:
my $sth = $s->db_Main->prepare(<<"");
SELECT *
FROM information_schema.columns
WHERE table_schema = ?
AND table_name = ?
# Simple discovery of fields and PK:
$sth->execute( $schema, $table );
my @cols = ( );
my $PK;
while( my $rec = $sth->fetchrow_hashref )
{
$rec->{ lc($_) } = delete($rec->{$_}) foreach keys(%$rec);
# Is this the primary column?:
$PK = $rec->{column_name}
if $rec->{column_key} &&
lc($rec->{column_key}) eq 'pri';
push @cols, $rec->{column_name};
}# end while()
$sth->finish();
confess "Table " . $schema . ".$table doesn't exist or has no columns"
unless @cols;
return {
Primary => [ $PK ],
Essential => \@cols,
All => \@cols,
};
}# end get_meta_columns()
#==============================================================================
sub after_set_up_table { }
#==============================================================================
sub get_table_info
{
my $s = shift;
my $class = ref($s) || $s;
my $cur = $class->db_Main->prepare("SHOW COLUMNS FROM " . $class->table);
$cur->execute;
my $info = Class::DBI::Lite::TableInfo->new( $class->table );
my %key_types = (
UNI => 'unique',
PRI => 'primary_key'
);
while( my $res = $cur->fetchrow_hashref )
{
$res->{lc($_)} = delete($res->{$_}) foreach keys(%$res);
my ($type) = $res->{type} =~ m/^([^\(\)]+)/;
my $length;
if( $type =~ m/(text|varchar|char)/i )
{
($length) = $res->{type} =~ m/\((\d+)\)/;
}# end if()
# If it's an enum, we want to provide a list of possible values:
my %enum_args = ( );
if( lc($type) eq 'enum' )
{
my $val = "$res->{type}";
$val =~ s/^enum\(//;
$val =~ s/\)$//;
my @vals = grep { length($_) } map {
$_ =~ s/^'//;
$_ =~ s/'$//;
$_;
} split /,\s*/, $val;
$enum_args{enum_values} = \@vals;
}#end if()
$info->add_column(
name => $res->{field},
type => lc($type),
length => $length,
is_pk => $res->{key} eq 'PRI' ? 1 : 0,
is_nullable => $res->{null} eq 'NO' ? 0 : 1,
default_value => $res->{default},
key => $key_types{ $res->{key} },
%enum_args,
);
}# end while()
$cur->finish;
return $info;
}# end get_table_info()
#==============================================================================
sub get_last_insert_id
{
$_[0]->db_Main->{mysql_insertid};
}# end get_last_insert_id()
sub lock_table
{
my ($s, $table) = @_;
$s->db_Main->do("lock tables $table read");
}# end lock_table()
sub unlock_table
{
shift->db_Main->do("unlock tables");
}# end unlock_table()
1;# return true:
|