=cut
use Moo;
-use SQL::Translator::Utils qw(parse_list_arg ex2err throw);
+use SQL::Translator::Utils qw(parse_list_arg ex2err throw carp_ro);
use SQL::Translator::Types qw(schema_obj);
+use SQL::Translator::Role::ListAttr;
use SQL::Translator::Schema::Constants;
use SQL::Translator::Schema::Constraint;
use SQL::Translator::Schema::Field;
use Carp::Clan '^SQL::Translator';
use List::Util 'max';
+use Sub::Quote qw(quote_sub);
-with qw(
- SQL::Translator::Schema::Role::Extra
- SQL::Translator::Schema::Role::Error
- SQL::Translator::Schema::Role::Compare
-);
+extends 'SQL::Translator::Schema::Object';
our $VERSION = '1.59';
has _constraints => (
is => 'ro',
init_arg => undef,
- default => sub { +[] },
+ default => quote_sub(q{ +[] }),
predicate => 1,
lazy => 1,
);
has _indices => (
is => 'ro',
init_arg => undef,
- default => sub { [] },
+ default => quote_sub(q{ [] }),
predicate => 1,
lazy => 1,
);
has _fields => (
is => 'ro',
init_arg => undef,
- default => sub { +{} },
+ default => quote_sub(q{ +{} }),
predicate => 1,
lazy => 1
);
my $field_name = $field->name;
if ( $self->get_field($field_name) ) {
- return $self->error(qq[Can't create field: "$field_name" exists]);
+ return $self->error(qq[Can't use field name "$field_name": field exists]);
}
else {
$self->_fields->{ $field_name } = $field;
has comments => (
is => 'rw',
- coerce => sub { ref($_[0]) eq 'ARRAY' ? $_[0] : [$_[0]] },
- default => sub { [] },
+ coerce => quote_sub(q{ ref($_[0]) eq 'ARRAY' ? $_[0] : [$_[0]] }),
+ default => quote_sub(q{ [] }),
);
around comments => sub {
has is_trivial_link => ( is => 'lazy', init_arg => undef );
+around is_trivial_link => carp_ro('is_trivial_link');
+
sub _build_is_trivial_link {
my $self = shift;
return 0 if $self->is_data;
has is_data => ( is => 'lazy', init_arg => undef );
+around is_data => carp_ro('is_data');
+
sub _build_is_data {
my $self = shift;
=cut
-has _can_link => ( is => 'ro', init_arg => undef, default => sub { +{} } );
+has _can_link => ( is => 'ro', init_arg => undef, default => quote_sub(q{ +{} }) );
sub can_link {
my ( $self, $table1, $table2 ) = @_;
=cut
-has schema => ( is => 'rw', isa => schema_obj('Schema') );
+has schema => ( is => 'rw', isa => schema_obj('Schema'), weak_ref => 1 );
around schema => \&ex2err;
=cut
-has options => (
- is => 'rw',
- default => sub { [] },
- coerce => \&parse_list_arg,
-);
-
-around options => sub {
- my $orig = shift;
- my $self = shift;
- my $options = parse_list_arg( @_ );
-
- push @{ $self->$orig }, @$options;
-
- return wantarray ? @{ $self->$orig } : $self->$orig;
-};
+with ListAttr options => ( append => 1 );
=head2 order
=cut
-has order => ( is => 'rw', default => sub { 0 } );
+has order => ( is => 'rw', default => quote_sub(q{ 0 }) );
around order => sub {
my ( $orig, $self, $arg ) = @_;
return wantarray ? @cons : \@cons;
}
-sub DESTROY {
- my $self = shift;
- undef $self->{'schema'}; # destroy cyclical reference
- undef $_ for @{ $self->{'constraints'} };
- undef $_ for @{ $self->{'indices'} };
- undef $_ for values %{ $self->{'fields'} };
-}
-
# Must come after all 'has' declarations
around new => \&ex2err;