File Coverage

blib/lib/Test/Fixture/DBI/Util/mysql.pm
Criterion Covered Total %
statement 9 78 11.5
branch 0 6 0.0
condition n/a
subroutine 3 11 27.2
pod 1 1 100.0
total 13 96 13.5


line stmt bran cond sub pod time code
1             package Test::Fixture::DBI::Util::mysql;
2              
3 1     1   663 use strict;
  1         1  
  1         29  
4 1     1   4 use warnings;
  1         1  
  1         18  
5              
6 1     1   4 use DBI;
  1         1  
  1         779  
7              
8             our $VERSION = '0.09';
9              
10             sub make_database {
11 0     0 1   my ( $class, $dbh ) = @_;
12              
13 0           my @database;
14 0           push( @database, $class->_tables($dbh) );
15 0           push( @database, $class->_procedures($dbh) );
16 0           push( @database, $class->_functions($dbh) );
17 0           push( @database, $class->_triggers($dbh) );
18 0           push( @database, $class->_events($dbh) );
19              
20 0           return \@database;
21             }
22              
23             sub _tables {
24 0     0     my ( $class, $dbh ) = @_;
25 0           my @tables =
26 0           map { $_->[0] } @{ $dbh->selectall_arrayref( q|SHOW TABLES|, ) };
  0            
27 0           my @data;
28 0           for my $table ( sort { $a cmp $b } @tables ) {
  0            
29 0           my ( $schema, $data ) =
30             $dbh->selectrow_array( sprintf( q|SHOW CREATE TABLE %s|, $table ) );
31 0           push(
32             @data,
33             +{
34             schema => $schema,
35             data => $data,
36             }
37             );
38             }
39 0           return @data;
40             }
41              
42             sub _procedures {
43 0     0     my ( $class, $dbh ) = @_;
44 0           my $dbname = _dbname($dbh);
45              
46 0           my $rows =
47             $dbh->selectall_arrayref( 'SHOW PROCEDURE STATUS', +{ Slice => +{} } );
48 0           my @data;
49 0           for my $row (
  0            
50 0           sort { $a->{Name} cmp $b->{Name} }
51             grep { $_->{Db} eq $dbname } @$rows
52             )
53             {
54 0           my $def = $dbh->selectrow_hashref(
55             sprintf( 'SHOW CREATE PROCEDURE %s', $row->{Name} ) );
56 0           push(
57             @data,
58             +{
59             procedure => $row->{Name},
60             data => $class->_remove_definer( $def->{'Create Procedure'} ),
61             }
62             );
63             }
64              
65 0           return @data;
66             }
67              
68             sub _functions {
69 0     0     my ( $class, $dbh ) = @_;
70 0           my $dbname = _dbname($dbh);
71              
72 0           my $rows =
73             $dbh->selectall_arrayref( 'SHOW FUNCTION STATUS', +{ Slice => +{} } );
74 0           my @data;
75 0           for my $row (
  0            
76 0           sort { $a->{Name} cmp $b->{Name} }
77             grep { $_->{Db} eq $dbname } @$rows
78             )
79             {
80 0           my $def = $dbh->selectrow_hashref(
81             sprintf( 'SHOW CREATE FUNCTION %s', $row->{Name} ) );
82 0           push(
83             @data,
84             +{
85             function => $row->{Name},
86             data => $class->_remove_definer( $def->{'Create Function'} ),
87             }
88             );
89             }
90              
91 0           return @data;
92             }
93              
94             sub _triggers {
95 0     0     my ( $class, $dbh ) = @_;
96              
97 0           my ( $is_enable_show_create_trigger ) = $dbh->selectrow_array( 'SELECT VERSION() >= 5.1' );
98              
99 0 0         unless ( $is_enable_show_create_trigger ) {
100 0           return ();
101             }
102              
103 0           my $rows = $dbh->selectall_arrayref( 'SHOW TRIGGERS', +{ Slice => +{} } );
104 0           my @data;
105 0           for my $row ( sort { $a->{Trigger} cmp $b->{Trigger} } @$rows ) {
  0            
106 0           my $def = $dbh->selectrow_hashref(
107             sprintf( 'SHOW CREATE TRIGGER %s', $row->{Trigger} ) );
108 0           push(
109             @data,
110             +{
111             trigger => $row->{Trigger},
112             refer => $row->{Table},
113             data =>
114             $class->_remove_definer( $def->{'SQL Original Statement'} ),
115             }
116             );
117             }
118              
119 0           return @data;
120             }
121              
122             sub _events {
123 0     0     my ( $class, $dbh ) = @_;
124              
125 0           my ( $is_enable_show_create_events ) = $dbh->selectrow_array( 'SELECT VERSION() >= 5.1' );
126              
127 0 0         unless ( $is_enable_show_create_events ) {
128 0           return ();
129             }
130              
131 0           my ($dbname) = $dbh->selectrow_array('SELECT DATABASE()');
132 0           my $rows = $dbh->selectall_arrayref( 'SHOW EVENTS', +{ Slice => +{} } );
133 0           my @data;
134 0           for my $row ( sort { $a->{Name} cmp $b->{Name} } grep { $_->{Db} eq $dbname } @$rows ) {
  0            
  0            
135 0           my $def = $dbh->selectrow_hashref( sprintf( 'SHOW CREATE EVENT %s', $row->{Name} ) );
136 0           push(
137             @data,
138             +{
139             name => $row->{Name},
140             interval_val => $row->{'Interval value'},
141             interval_field => $row->{'Interval field'},
142             data => $def->{'Create Event'},
143             }
144             );
145             }
146              
147 0           return @data;
148             }
149              
150             sub _remove_definer {
151 0     0     my ( $class, $def ) = @_;
152 0           $def =~ s/CREATE(\s*.*\s*)(PROCEDURE|FUNCTION|TRIGGER)/CREATE $2/i;
153 0           $def;
154             }
155              
156             sub _dbname {
157 0     0     my $dbh = shift;
158 0           my %dsn = map { split( '=', $_, 2 ) } split( ';', $dbh->{Name} );
  0            
159 0 0         return exists $dsn{dbname} ? $dsn{dbname} : $dsn{db};
160             }
161              
162             1;
163              
164             __END__