Mercurial > pub > Impl
diff lib/IMPL/SQL/Schema/Column.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
author | cin |
---|---|
date | Fri, 04 Sep 2015 19:40:23 +0300 |
parents | |
children | 3ed0c58e9da3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/IMPL/SQL/Schema/Column.pm Fri Sep 04 19:40:23 2015 +0300 @@ -0,0 +1,75 @@ +use strict; +package IMPL::SQL::Schema::Column; + +use IMPL::lang qw( :DEFAULT :compare :hash ); +use IMPL::Exception(); +use IMPL::Const qw(:prop); +use IMPL::declare { + require => { + SchemaType => '-IMPL::SQL::Schema::Type' + }, + base => [ + 'IMPL::Object' => undef, + 'IMPL::Object::Autofill' => '@_' + ], + props => [ + name => PROP_RO | PROP_DIRECT, + type => PROP_RO | PROP_DIRECT, + isNullable => PROP_RO | PROP_DIRECT, + defaultValue => PROP_RO | PROP_DIRECT, + tag => PROP_RO | PROP_DIRECT + ] +}; + +sub CTOR { + my $this = shift; + + $this->{$name} or + die new IMPL::InvalidArgumentException('A column name is required'); + + $this->{$isNullable} ||= 0; # if not exists $this->{$isNullable}; + + is( $this->{$type}, SchemaType) or + die new IMPL::InvalidArgumentException('a type is required for the column',$this->{$name}); +} + +sub SameValue { + my ($this,$other) = @_; + + return ( + $this->{$name} eq $other->{$name} + and $this->{$isNullable} == $other->{$isNullable} + and equals_s($this->{$defaultValue}, $other->{$defaultValue}) + and $this->{$type}->SameValue($other->{$type}) + ); +} + +sub SetType { + my ($this,$newType) = @_; + + $this->{$type} = $newType; +} + +sub SetDefaultValue { + my ($this,$value) = @_; + + $this->{$defaultValue} = $value; +} + +sub SetNullable { + my ($this, $value) = @_; + + $this->{$isNullable} = $value; +} + +sub SetOptions { + my ($this,$diff) = @_; + + return unless ref $diff eq 'HASH'; + + $this->tag({}) unless $this->tag; + + hashApply($this->tag,$diff); +} + +1;