Get enum values directly from column_info for PostgreSQL
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / DBI / Component / QuotedDefault.pm
index 7c1931c..772dbb2 100644 (file)
@@ -2,9 +2,10 @@ package DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault;
 
 use strict;
 use warnings;
-use Class::C3;
+use base 'DBIx::Class::Schema::Loader::DBI';
+use mro 'c3';
 
-our $VERSION = '0.06001';
+our $VERSION = '0.07048_01';
 
 =head1 NAME
 
@@ -23,7 +24,7 @@ sub _columns_info_for {
     my $self    = shift;
     my ($table) = @_;
 
-    my $result = $self->next::method(@_);
+    my ($result,$raw) = $self->next::method(@_);
 
     while (my ($col, $info) = each %$result) {
         if (my $def = $info->{default_value}) {
@@ -34,13 +35,24 @@ sub _columns_info_for {
             if ($def =~ /^["'](.*?)['"](?:::[\w\s]+)?\z/) {
                 $info->{default_value} = $1;
             }
+# Some DBs (eg. Pg) put parenthesis around negative number defaults
+            elsif ($def =~ /^\((-?\d.*?)\)(?:::[\w\s]+)?\z/) {
+                $info->{default_value} = $1;
+            }
+            elsif ($def =~ /^(-?\d.*?)(?:::[\w\s]+)?\z/) {
+                $info->{default_value} = $1;
+            }
+            elsif ($def =~ /^NULL:?/i) {
+                my $null = 'null';
+                $info->{default_value} = \$null;
+            }
             else {
-                $info->{default_value} = $def =~ /^\d/ ? $def : \$def;
+                $info->{default_value} = \$def;
             }
         }
     }
 
-    return $result;
+    return wantarray ? ($result, $raw) : $result;
 }
 
 1;
@@ -50,9 +62,9 @@ sub _columns_info_for {
 L<DBIx::Class::Schema::Loader>, L<DBIx::Class::Schema::Loader::Base>,
 L<DBIx::Class::Schema::Loader::DBI>
 
-=head1 AUTHOR
+=head1 AUTHORS
 
-See L<DBIx::Class::Schema::Loader/AUTHOR> and L<DBIx::Class::Schema::Loader/CONTRIBUTORS>.
+See L<DBIx::Class::Schema::Loader/AUTHORS>.
 
 =head1 LICENSE