X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FObject%2FColumn.pm;h=d80d49fd83d6fc92a1596e2aa283c413df59fde6;hb=072eb21885367b4e7f85e732719b933792a9ec53;hp=180e97845ce84575e111a594f60234bb3d85e980;hpb=bbdcd43eab7e71618be136f2926cd356a7842bc9;p=dbsrgits%2FSQL-Translator-2.0-ish.git diff --git a/lib/SQL/Translator/Object/Column.pm b/lib/SQL/Translator/Object/Column.pm index 180e978..d80d49f 100644 --- a/lib/SQL/Translator/Object/Column.pm +++ b/lib/SQL/Translator/Object/Column.pm @@ -1,14 +1,105 @@ -package SQL::Translator::Object::Column; -use Moose; -use MooseX::Types::Moose qw(Bool Int Str); -use SQL::Translator::Types qw(Trigger); - -has 'name' => (is => 'ro', isa => Str, required => 1); -has 'type' => (is => 'ro', isa => Str, required => 1); -has 'size' => (is => 'ro', isa => Int, required => 1); -has 'is_nullable' => (is => 'ro', isa => Bool, required => 1, default => 1); -has 'is_auto_increment' => (is => 'ro', isa => Bool, required => 0, default => 0); -has 'default_value' => (is => 'ro', isa => Str, required => 0); -has 'trigger' => (is => 'ro', isa => Trigger, required => 0); - -1; +use MooseX::Declare; +class SQL::Translator::Object::Column extends SQL::Translator::Object is dirty { + use MooseX::Types::Moose qw(Bool Int Maybe ScalarRef Str); + use MooseX::MultiMethods; + use SQL::Translator::Types qw(Bit ColumnSize Constraint Table Trigger); + clean; + + use overload + '""' => sub { shift->name }, + 'bool' => sub { $_[0]->name || $_[0] }, + fallback => 1, + ; + + has 'table' => ( + is => 'rw', + isa => Table, + weak_ref => 1, + ); + + has 'name' => ( + is => 'rw', + isa => Str, + required => 1, + trigger => sub { die "Cannot use '' as a column name" if $_[1] eq '' } + ); + + has 'data_type' => ( + is => 'rw', + isa => Str, + required => 1, + default => '', + ); + + has 'sql_data_type' => ( + is => 'rw', + isa => Int, + required => 1, + default => 0 + ); + + has 'size' => ( + is => 'rw', + isa => ColumnSize, + coerce => 1, + auto_deref => 1, + default => sub { [ 0 ] }, + ); + + has 'is_nullable' => ( + is => 'rw', + isa => Bit, + required => 1, + default => 1 + ); + + has 'default_value' => ( + is => 'rw', + isa => Maybe[ScalarRef|Str], + ); + + has 'is_auto_increment' => ( + is => 'rw', + isa => Bit, + required => 1, + coerce => 1, + default => 0 + ); + + has 'is_primary_key' => ( + is => 'rw', + isa => Bool, + default => 0 + ); + + has 'is_foreign_key' => ( + is => 'rw', + isa => Bool, + default => 0 + ); + + has 'foreign_key_reference' => ( + is => 'rw', + isa => Constraint, + ); + + has 'trigger' => ( + is => 'rw', + isa => Trigger, + ); + + around size(@args) { + $self->$orig(@args) if @args; + my @sizes = $self->$orig; + return wantarray ? @sizes + : join ',', @sizes; + } + + method full_name { $self->table->name . '.' . $self->name } + method schema { $self->table->schema } + + method order { } + method is_unique { } + + before name($name?) { die "Can't use column name $name" if $name && $self->table->exists_column($name) && $name ne $self->name; } +}