X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI%2FOracle.pm;h=b9f230440d8408379cdf026a1927cdaa199b36b0;hb=242c152546ea957bee6a11f50568db056c4d2df9;hp=3b24d687ae852e7274e0958aa4d0b71d5e932b58;hpb=a40434df5a53f085fb693e7c83aa08eca39de567;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm b/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm index 3b24d68..b9f2304 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm @@ -5,9 +5,10 @@ use warnings; use base 'DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault'; use mro 'c3'; use Try::Tiny; +use DBIx::Class::Schema::Loader::Utils qw/sigwarn_silencer/; use namespace::clean; -our $VERSION = '0.07028'; +our $VERSION = '0.07038'; =head1 NAME @@ -69,11 +70,9 @@ sub _filter_tables { my $self = shift; # silence a warning from older DBD::Oracles in tests - my $warn_handler = $SIG{__WARN__} || sub { warn @_ }; - local $SIG{__WARN__} = sub { - $warn_handler->(@_) - unless $_[0] =~ /^Field \d+ has an Oracle type \(\d+\) which is not explicitly supported/; - }; + local $SIG{__WARN__} = sigwarn_silencer( + qr/^Field \d+ has an Oracle type \(\d+\) which is not explicitly supported/ + ); return $self->next::method(@_); } @@ -186,7 +185,7 @@ EOF $sth->execute($table->name, $table->schema); while (my ($trigger_body) = $sth->fetchrow_array) { - if (my ($seq_schema, $seq_name) = $trigger_body =~ /(?:\."?(\w+)"?)?"?(\w+)"?\.nextval/i) { + if (my ($seq_schema, $seq_name) = $trigger_body =~ /(?:"?(\w+)"?\.)?"?(\w+)"?\.nextval/i) { if (my ($col_name) = $trigger_body =~ /:new\.(\w+)/i) { $col_name = $self->_lc($col_name); @@ -200,6 +199,9 @@ EOF } } + # Old DBD::Oracle report the size in (UTF-16) bytes, not characters + my $nchar_size_factor = $DBD::Oracle::VERSION >= 1.52 ? 1 : 2; + while (my ($col, $info) = each %$result) { no warnings 'uninitialized'; @@ -230,7 +232,7 @@ EOF $info->{size} = $info->{size}[0] / 8; } else { - $info->{size} = $info->{size} / 2; + $info->{size} = $info->{size} / $nchar_size_factor; } } elsif ($info->{data_type} =~ /^(?:var)?char2?\z/i) {