File Coverage

lib/DBSchema/Sample.pm
Criterion Covered Total %
statement 15 93 16.1
branch 0 24 0.0
condition 0 9 0.0
subroutine 5 10 50.0
pod 0 4 0.0
total 20 140 14.2


line stmt bran cond sub pod time code
1             package DBSchema::Sample;
2              
3              
4 1     1   12383 use strict;
  1         2  
  1         29  
5 1     1   4 use warnings;
  1         3  
  1         29  
6              
7 1     1   755 use DBIx::AnyDBD;
  1         26485  
  1         961  
8              
9             require Exporter;
10              
11             our @ISA = qw(Exporter);
12              
13             # Items to export into callers namespace by default. Note: do not export
14             # names by default without a very good reason. Use EXPORT_OK instead.
15             # Do not simply export all your public functions/methods/constants.
16              
17             # This allows declaration use DBSchema::Sample ':all';
18             # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
19             # will save memory.
20             our %EXPORT_TAGS = ( 'all' => [ qw(
21            
22             ) ] );
23              
24             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
25              
26             our @EXPORT = qw(load
27            
28             );
29              
30             our $VERSION = '2.0.a';
31              
32              
33             # Preloaded methods go here.
34              
35              
36             # Building Makefile for DBSchame::Sample
37              
38              
39              
40             # Ignore the following DBD Drivers
41              
42             my %drivers;
43              
44             my %ignore = ('ExampleP' => 1,
45             'NullP' => 1,
46             'Sponge' => 1,
47             'Proxy' => 1,
48             'File' => 1) ;
49              
50             my %datasource = ('Pg' => 'dbi:Pg:dbname=test',
51             'SQLite' => 'dbi:SQLite:test',
52             'mysql' => 'dbi:mysql:dbname=test',
53             ) ;
54              
55             ## ----------------------------------------------------------------------------
56              
57             sub MY::test_via_script
58             {
59 0     0     my ($txt) = shift -> MM::test_via_script (@_) ;
60              
61 0           $txt =~ s/\$\(TEST_FILE\)/\$(TEST_FILE) \$(TESTARGS)/g ;
62              
63 0           return $txt ;
64             }
65            
66              
67             ## ----------------------------------------------------------------------------
68              
69             sub GetString
70             {
71 0     0 0   my ($prompt, $default) = @_ ;
72              
73 0           printf ("%s [%s]", $prompt, $default) ;
74 0           chop ($_ = ) ;
75 0 0         if (!/^\s*$/)
  0            
76             {return $_ ;}
77             else
78             {
79 0 0         if ($_ eq "")
  0            
80             {return $default ;}
81             else
82 0           { return "" ; }
83            
84             }
85             }
86              
87             ## ----------------------------------------------------------------------------
88              
89             sub GetYesNo
90             {
91 0     0 0   my ($prompt, $default) = @_ ;
92 0           my ($value) ;
93              
94             do
95 0   0       {
      0        
96 0 0         $value = lc (GetString ($prompt . "(y/n)", ($default?"y":"n"))) ;
97             }
98             until (($value cmp "j") == 0 || ($value cmp "y") == 0 || ($value cmp "n" ) == 0) ;
99              
100 0           return ($value cmp "n") != 0 ;
101             }
102              
103             ## ----------------------------------------------------------------------------
104              
105             sub load {
106              
107 0     0 0   print "\n";
108              
109 0           my @prereq = qw(DBI DBIx::AnyDBD);
110              
111 0           for my $prereq (@prereq) {
112              
113 0           eval "use $prereq" ;
114              
115 0 0         die "\nPlease install $prereq before installing DBSchema::Sample" if ($@) ;
116 0           my $v = $prereq->VERSION;
117 0           my $v2 = eval $v;
118 0           print "Found $prereq version $v2\n" ;
119              
120             }
121              
122 0           my @drvs = DBI::available_drivers () ;
123              
124 0           my $driversinstalled;
125              
126 0           foreach my $drv (@drvs)
127             {
128 0 0         next if (exists ($ignore{$drv})) ;
129            
130 0   0       $drivers{$drv}{dsn} = $datasource{$drv} || "dbi:$drv:test" ;
131              
132 0           ++$driversinstalled;
133             }
134              
135 0 0         unless ($driversinstalled)
136             {
137 0           die
138             "At least one DBD driver must be installed before running load" ;
139             }
140              
141 0           print "Found the following DBD drivers:\n" ;
142              
143 0           my @drivers = sort keys %drivers ;
144 0           my $i = 1 ;
145              
146 0           foreach (@drivers)
147             {
148 0           print "$i.) $_\n" ;
149 0           $i++ ;
150             }
151              
152 0           print "\n" ;
153 0           print "We need an existing datasource for each\n" ;
154 0           print "DBD driver to populate the database.\n" ;
155 0           print "Please enter a valid datasource (or accept the default) for each DBD driver\n" ;
156 0           print "or enter a '.' if you do not want to load the sample schema using this driver\n" ;
157 0           print "\n" ;
158              
159 0           $i = 1 ;
160 0           my ($user, $pass);
161 0           foreach my $drv (@drivers)
162             {
163 0           my $dsn = GetString ("$i.) $drv", $drivers{$drv}{dsn}) ;
164 0 0         if ($dsn eq '.')
165 0           { delete $drivers{$drv} ; }
166             else
167             {
168 0           $drivers{$drv}{dsn} = $dsn ;
169 0           $user = GetString ("\tUsername", "undef") ;
170 0 0         if ($user ne 'undef')
171             {
172 0           $drivers{$drv}{user} = $user ;
173 0           $pass = GetString ("\tPassword", "undef");
174 0 0         $drivers{$drv}{pass} = $pass if ($pass ne 'undef') ;
175             }
176             }
177 0           $i++ ;
178             }
179              
180 0           print "\n" ;
181 0           print "These databases will populated using the following parameters\n" ;
182              
183 0           @drivers = sort keys %drivers ;
184 0           for my $D (@drivers)
185             {
186 0           print "$D \t-> $drivers{$D}{dsn}\t" ;
187 0 0         print "user: $drivers{$D}{user}\t" if (defined ($drivers{$D}{user})) ;
188 0 0         print "password: $drivers{$D}{pass}" if (defined ($drivers{$D}{pass})) ;
189 0           print "\n" ;
190            
191 0           print "Access this database and populate? ";
192 0 0         next unless GetYesNo (" > ", "");
193              
194 0           my $app_handle = app_handle($drivers{$D});
195              
196 1     1   1528 use Data::Dumper;
  1         10808  
  1         217  
197 0           warn Dumper($app_handle);
198              
199 0           my $sql = $app_handle->sql;
200              
201 0           for (@$sql) {
202 0           warn $_;
203 0           $app_handle->get_dbh->do($_);
204             }
205             }
206              
207             }
208              
209             sub app_handle {
210              
211 0     0 0   my $c = shift;
212              
213 1     1   10 use Data::Dumper;
  1         2  
  1         134  
214 0           warn Dumper($c);
215              
216 0           my $attr = { RaiseError => 1, PrintError => 1 } ;
217 0           my $class = __PACKAGE__;
218              
219              
220 0           DBIx::AnyDBD->connect
221             (
222             $c->{dsn},
223             $c->{user},
224             $c->{pass},
225             $attr,
226             $class # The one difference between DBI and DBIx::AnyDBD
227             );
228              
229             }
230              
231              
232             __END__