File Coverage

lib/DBIx/Schema/Changelog/Driver.pm
Criterion Covered Total %
statement 38 39 97.4
branch 12 18 66.6
condition 4 5 80.0
subroutine 11 11 100.0
pod 4 4 100.0
total 69 77 89.6


line stmt bran cond sub pod time code
1             package DBIx::Schema::Changelog::Driver;
2              
3             =head1 NAME
4              
5             DBIx::Schema::Changelog::Driver - Abstract driver class.
6              
7             =head1 VERSION
8              
9             Version 0.7.2
10              
11             =cut
12              
13             our $VERSION = '0.7.2';
14              
15 8     8   4701 use strict;
  8         14  
  8         293  
16 8     8   32 use warnings FATAL => 'all';
  8         55  
  8         311  
17 8     8   32 use Moose::Role;
  8         10  
  8         59  
18 8     8   27726 use MooseX::Types::PerlVersion qw( PerlVersion );
  8         13  
  8         68  
19 8     8   4906 use MooseX::Types::Moose qw( Maybe Undef );
  8         11  
  8         44  
20 8     8   31157 use Data::Dumper;
  8         25364  
  8         4181  
21              
22             has min_version => (
23             is => 'ro',
24             isa => PerlVersion,
25             coerce => 1,
26             builder => '_min_version',
27             );
28              
29             has max_version => (
30             is => 'ro',
31             isa => PerlVersion | Undef,
32             coerce => 1,
33             builder => '_max_version',
34             );
35              
36             has changelog_table => (
37             isa => 'ArrayRef[Any]',
38             is => 'ro',
39             default => sub {
40             return [
41             {
42             name => 'id',
43             type => 'varchar',
44             lenght => 255,
45             primarykey => 1,
46             notnull => 1,
47             default => '\'\''
48             },
49             {
50             name => 'author',
51             type => 'varchar',
52             lenght => 255,
53             notnull => 1,
54             default => '\'\''
55             },
56             {
57             name => 'filename',
58             type => 'varchar',
59             lenght => 255,
60             notnull => 1,
61             default => '\'\''
62             },
63             {
64             name => 'flag',
65             type => 'timestamp',
66             notnull => 1,
67             default => 'current'
68             },
69             {
70             name => 'orderexecuted',
71             type => 'varchar',
72             lenght => 255,
73             },
74             {
75             name => 'md5sum',
76             type => 'varchar',
77             lenght => 255,
78             notnull => 1,
79             default => '\'\''
80             },
81             {
82             name => 'description',
83             type => 'varchar',
84             lenght => 255,
85             },
86             {
87             name => 'comments',
88             type => 'varchar',
89             lenght => 255,
90             },
91             {
92             name => 'changelog',
93             type => 'varchar',
94             lenght => 10,
95             notnull => 1,
96             default => '\'\''
97             },
98             ];
99             }
100             );
101              
102             has origin_types => (
103             isa => 'ArrayRef[Str]',
104             is => 'ro',
105             default => sub {
106             return [
107             'abstime', 'aclitem', #A
108             'bigint', 'bigserial', 'bit', 'varbit', 'blob', 'bool', 'box',
109             'bytea', #B
110             'char', 'character', 'varchar', 'cid', 'cidr', 'circle', #C
111             'date', 'daterange', 'double', 'double_precision', 'decimal', #D
112             #E
113             #F
114             'gtsvector', #G
115             #H
116             'inet', 'int2vector', 'int4range', 'int8range', 'integer',
117             'interval', #I
118             'json', #J
119             #K
120             'line', 'lseg', #L
121             'macaddr', 'money', #M
122             'name', 'numeric', 'numrange', #N
123             'oid', 'oidvector', #O
124             'path', 'pg_node_tree', 'point', 'polygon', #P
125             #Q
126             'real', 'refcursor', 'regclass', 'regconfig', 'regdictionary',
127             'regoper', 'regoperator', 'regproc', 'regprocedure', 'regtype',
128             'reltime', #R
129             'serial', 'smallint', 'smallserial', 'smgr', #S
130             'text', 'tid', 'timestamp', 'timestamp_tz', 'time', 'time_tz',
131             'tinterval', 'tsquery', 'tsrange', 'tstzrange', 'tsvector',
132             'txid_snapshot', #T
133             'uuid', #U
134             #V
135             #W
136             'xid', #X
137             #Y
138             #Z
139             ];
140             }
141             );
142              
143             =head1 SUBROUTINES/METHODS
144              
145             =over 4
146              
147             =item check_version
148              
149             =cut
150              
151             sub check_version {
152 8     8 1 338 my ( $self, $vers ) = @_;
153              
154 8 100       19 if ( $self->has_max_version ) {
155 3 100 100     79 return 1
156             if ( $self->min_version() <= $vers && $vers <= $self->max_version() );
157 2         191 die "Unsupported version: "
158             . $self->min_version()
159             . " <= $vers <= "
160             . $self->max_version();
161             }
162             else {
163 5 100       151 return 1 if ( $self->min_version() <= $vers );
164 1         101 die "Unsupported version: " . $self->min_version() . " <= $vers";
165             }
166             }
167              
168             =item type
169              
170             =cut
171              
172             sub type {
173 108     108 1 147 my ( $self, $col ) = @_;
174 108         3705 my $ret =
175 108 50       110 ( grep( /^$col->{type}$/, @{ $self->origin_types() } ) )
176             ? $self->types()->{ $col->{type} }
177             : undef;
178 107 50       204 die "Type: $col->{type} not found.\n" unless $ret;
179 107 50       222 $ret .= ( $col->{strict} ) ? '(strict)' : '';
180 107 100       189 $ret .= ( defined $col->{lenght} ) ? "($col->{lenght})" : '';
181 107         329 return $ret;
182             }
183              
184             =item has_max_version
185              
186             check if max version is set
187              
188             =cut
189              
190 8     8 1 233 sub has_max_version { defined shift->max_version }
191              
192             =item has_max_version
193              
194             builder for max version
195              
196             =cut
197              
198 8     8   226 sub _max_version { }
199              
200             =item create_changelog_table
201              
202             =cut
203              
204             sub create_changelog_table {
205 2     2 1 3 my ( $self, $dbh, $name ) = @_;
206 2         58 my $sth = $dbh->prepare( $self->select_changelog_table() );
207 2 50 50     826 if ( $sth->execute() or die "Some error $!" ) {
208 2         19 foreach ( $sth->fetchrow_array() ) {
209 0 0       0 return undef if ( $_ =~ /^$name$/ );
210             }
211             }
212             return {
213 2         75 name => $name,
214             columns => $self->changelog_table()
215             };
216             }
217              
218             1; # End of DBIx::Schema::Changelog::Driver
219              
220             __END__
221              
222             =back
223              
224             =head1 AUTHOR
225              
226             Mario Zieschang, C<< <mario.zieschang at combase.de> >>
227              
228             =head1 LICENSE AND COPYRIGHT
229              
230             Copyright 2015 Mario Zieschang.
231              
232             This program is free software; you can redistribute it and/or modify it
233             under the terms of the the Artistic License (2.0). You may obtain a
234             copy of the full license at:
235              
236             L<http://www.perlfoundation.org/artistic_license_2_0>
237              
238             Any use, modification, and distribution of the Standard or Modified
239             Versions is governed by this Artistic License. By using, modifying or
240             distributing the Package, you accept this license. Do not use, modify,
241             or distribute the Package, if you do not accept this license.
242              
243             If your Modified Version has been derived from a Modified Version made
244             by someone other than you, you are nevertheless required to ensure that
245             your Modified Version complies with the requirements of this license.
246              
247             This license does not grant you the right to use any trademark, service
248             mark, trade name, or logo of the Copyright Holder.
249              
250             This license includes the non-exclusive, worldwide, free-of-charge
251             patent license to make, have made, use, offer to sell, sell, import and
252             otherwise transfer the Package with respect to any patent claims
253             licensable by the Copyright Holder that are necessarily infringed by the
254             Package. If you institute patent litigation (including a cross-claim or
255             counterclaim) against any party alleging that the Package constitutes
256             direct or contributory patent infringement, then this Artistic License
257             to you shall terminate on the date that such litigation is filed.
258              
259             Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER
260             AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
261             THE IMPLIED WARRANTIES OF MERCHANT ABILITY, FITNESS FOR A PARTICULAR
262             PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY
263             YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR
264             CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR
265             CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE,
266             EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
267              
268              
269             =cut