File Coverage

blib/lib/DBIx/Class/Schema/Loader/DBI/Component/QuotedDefault.pm
Criterion Covered Total %
statement 24 27 88.8
branch 9 12 75.0
condition n/a
subroutine 5 5 100.0
pod n/a
total 38 44 86.3


line stmt bran cond sub pod time code
1             package DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault;
2              
3 49     49   506 use strict;
  49         148  
  49         2228  
4 49     49   333 use warnings;
  49         143  
  49         3056  
5 49     49   463 use base 'DBIx::Class::Schema::Loader::DBI';
  49         133  
  49         9141  
6 49     49   426 use mro 'c3';
  49         137  
  49         602  
7              
8             our $VERSION = '0.07053';
9              
10             =head1 NAME
11              
12             DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault -- Loader::DBI
13             Component to parse quoted default constants and functions
14              
15             =head1 DESCRIPTION
16              
17             If C from L returns character constants quoted,
18             then we need to remove the quotes. This also allows distinguishing between
19             default functions without information schema introspection.
20              
21             =cut
22              
23             sub _columns_info_for {
24 839     839   14507 my $self = shift;
25 839         2966 my ($table) = @_;
26              
27 839         4220 my ($result,$raw) = $self->next::method(@_);
28              
29 839         7076 while (my ($col, $info) = each %$result) {
30 2340 100       12454 if (my $def = $info->{default_value}) {
31 262         1247 $def =~ s/^\s+//;
32 262         909 $def =~ s/\s+\z//;
33              
34             # remove Pg typecasts (e.g. 'foo'::character varying) too
35 262 100       3060 if ($def =~ /^["'](.*?)['"](?:::[\w\s]+)?\z/) {
    50          
    100          
    50          
36 117         938 $info->{default_value} = $1;
37             }
38             # Some DBs (eg. Pg) put parenthesis around negative number defaults
39             elsif ($def =~ /^\((-?\d.*?)\)(?:::[\w\s]+)?\z/) {
40 0         0 $info->{default_value} = $1;
41             }
42             elsif ($def =~ /^(-?\d.*?)(?:::[\w\s]+)?\z/) {
43 28         160 $info->{default_value} = $1;
44             }
45             elsif ($def =~ /^NULL:?/i) {
46 0         0 my $null = 'null';
47 0         0 $info->{default_value} = \$null;
48             }
49             else {
50 117         811 $info->{default_value} = \$def;
51             }
52             }
53             }
54              
55 839 50       20086 return wantarray ? ($result, $raw) : $result;
56             }
57              
58             1;
59              
60             =head1 SEE ALSO
61              
62             L, L,
63             L
64              
65             =head1 AUTHORS
66              
67             See L.
68              
69             =head1 LICENSE
70              
71             This library is free software; you can redistribute it and/or modify it under
72             the same terms as Perl itself.
73              
74             =cut