Get enum values directly from column_info for PostgreSQL
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / DBI / Component / QuotedDefault.pm
CommitLineData
6b0e47fc 1package DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault;
2
3use strict;
4use warnings;
383bd2a8 5use base 'DBIx::Class::Schema::Loader::DBI';
942bd5e0 6use mro 'c3';
6b0e47fc 7
46564a42 8our $VERSION = '0.07048_01';
6b0e47fc 9
10=head1 NAME
11
dc744c9d 12DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault -- Loader::DBI
13Component to parse quoted default constants and functions
6b0e47fc 14
15=head1 DESCRIPTION
16
17If C<COLUMN_DEF> from L<DBI/column_info> returns character constants quoted,
18then we need to remove the quotes. This also allows distinguishing between
19default functions without information schema introspection.
20
21=cut
22
23sub _columns_info_for {
24 my $self = shift;
25 my ($table) = @_;
26
afa71a98 27 my ($result,$raw) = $self->next::method(@_);
6b0e47fc 28
29 while (my ($col, $info) = each %$result) {
30 if (my $def = $info->{default_value}) {
31 $def =~ s/^\s+//;
32 $def =~ s/\s+\z//;
33
41968729 34# remove Pg typecasts (e.g. 'foo'::character varying) too
35 if ($def =~ /^["'](.*?)['"](?:::[\w\s]+)?\z/) {
6b0e47fc 36 $info->{default_value} = $1;
37 }
96336646 38# Some DBs (eg. Pg) put parenthesis around negative number defaults
39 elsif ($def =~ /^\((-?\d.*?)\)(?:::[\w\s]+)?\z/) {
40 $info->{default_value} = $1;
41 }
c99b3e2b 42 elsif ($def =~ /^(-?\d.*?)(?:::[\w\s]+)?\z/) {
96336646 43 $info->{default_value} = $1;
44 }
45 elsif ($def =~ /^NULL:?/i) {
87a43db1 46 my $null = 'null';
47 $info->{default_value} = \$null;
96336646 48 }
6b0e47fc 49 else {
96336646 50 $info->{default_value} = \$def;
6b0e47fc 51 }
52 }
53 }
54
afa71a98 55 return wantarray ? ($result, $raw) : $result;
6b0e47fc 56}
57
581;
59
60=head1 SEE ALSO
61
62L<DBIx::Class::Schema::Loader>, L<DBIx::Class::Schema::Loader::Base>,
63L<DBIx::Class::Schema::Loader::DBI>
64
b87ab391 65=head1 AUTHORS
6b0e47fc 66
b87ab391 67See L<DBIx::Class::Schema::Loader/AUTHORS>.
6b0e47fc 68
69=head1 LICENSE
70
71This library is free software; you can redistribute it and/or modify it under
72the same terms as Perl itself.
73
74=cut