use warnings;
use strict;
-our $VERSION = '0.02000';
+our $VERSION = '0.02001';
use base qw/DBIx::Class/;
__PACKAGE__->mk_classdata(ip_format => 'addr');
__PACKAGE__->load_components(qw/InflateColumn::IP Core/);
__PACKAGE__->add_columns(
ip_address => {
- data_type => 'integer',
+ data_type => 'bigint',
is_nullable => 0,
is_ip => 1,
ip_format => 'numeric',
print 'IP address: ', $host->ip_address->addr;
print 'Address type: ', $host->ip_address->iptype;
+DBIx::Class::InflateColumn::IP supports a limited amount of
+auto-detection of the format based on the column type. If the type
+begins with C<int> or C<bigint>, it's assumed to be numeric, while
+C<inet> and C<cidr> (as used by e.g. PostgreSQL) are assumed to be
+C<cidr> format.
+
=head1 METHODS
=head2 ip_class
return unless defined $info->{'is_ip'};
- my $ip_format = $info->{ip_format} || $self->ip_format || 'addr';
- my $ip_class = $info->{ip_class} || $self->ip_class || 'NetAddr::IPf';
+ my $ip_format = $info->{ip_format} || _default_format($info->{data_type})
+ || $self->ip_format || 'addr';
+ my $ip_class = $info->{ip_class} || $self->ip_class || 'NetAddr::IP';
eval "use $ip_class";
$self->throw_exception("Error loading $ip_class: $@") if $@;
);
}
+my @format_map = (
+ { type => qr/^(?:big)?int/i, format => 'numeric' },
+ { type => qr{^(?:inet|cidr)$}i, format => 'cidr' },
+);
+
+sub _default_format {
+ my ($type) = @_;
+
+ for my $match (@format_map) {
+ return $match->{format} if $type =~ $match->{type};
+ }
+}
+
=head1 AUTHOR
-Dagfinn Ilmari Mannsåker, C<< <ilmari at ilmari.org> >>
+Dagfinn Ilmari Mannsåker, C<< <ilmari at ilmari.org> >>
=head1 BUGS
=head1 COPYRIGHT & LICENSE
-Copyright 2007 Dagfinn Ilmari Mannsåker, all rights reserved.
+Copyright 2007 Dagfinn Ilmari Mannsåker, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.