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 16     16   138 use strict;
  16         43  
  16         468  
4 16     16   96 use warnings;
  16         39  
  16         446  
5 16     16   93 use base 'DBIx::Class::Schema::Loader::DBI';
  16         54  
  16         2524  
6 16     16   132 use mro 'c3';
  16         48  
  16         109  
7              
8             our $VERSION = '0.07050';
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 766     766   11128 my $self = shift;
25 766         2288 my ($table) = @_;
26              
27 766         3096 my ($result,$raw) = $self->next::method(@_);
28              
29 766         5442 while (my ($col, $info) = each %$result) {
30 2156 100       10066 if (my $def = $info->{default_value}) {
31 202         979 $def =~ s/^\s+//;
32 202         744 $def =~ s/\s+\z//;
33              
34             # remove Pg typecasts (e.g. 'foo'::character varying) too
35 202 100       2945 if ($def =~ /^["'](.*?)['"](?:::[\w\s]+)?\z/) {
    50          
    100          
    50          
36 87         737 $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         141 $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 87         705 $info->{default_value} = \$def;
51             }
52             }
53             }
54              
55 766 50       10978 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