49
+ − 1 use strict;
+ − 2 package IMPL::SQL::Schema::Column;
+ − 3 use base qw(IMPL::Object IMPL::Object::Autofill);
+ − 4
+ − 5 use IMPL::Class::Property;
+ − 6 use IMPL::Class::Property::Direct;
+ − 7
+ − 8 BEGIN {
+ − 9 public _direct property Name => prop_get;
+ − 10 public _direct property Type => prop_get;
+ − 11 public _direct property CanBeNull => prop_get;
+ − 12 public _direct property DefaultValue => prop_get;
+ − 13 public _direct property Tag => prop_get;
+ − 14 }
+ − 15
+ − 16 __PACKAGE__->PassThroughArgs;
+ − 17
+ − 18 sub CTOR {
+ − 19 my $this = shift;
+ − 20
+ − 21 $this->{$Name} or die new IMPL::InvalidArgumentException('a column name is required');
+ − 22 $this->{$CanBeNull} = 0 if not exists $this->{$CanBeNull};
+ − 23 UNIVERSAL::isa($this->{$Type},'IMPL::SQL::Schema::Type') or die new IMPL::InvalidArgumentException('a type is required for the column',$this->{$Name});
+ − 24 }
+ − 25
+ − 26 sub isEqualsStr {
+ − 27 my ($a,$b) = @_;
+ − 28
+ − 29 if (defined $a and defined $b) {
+ − 30 return $a eq $b;
+ − 31 } else {
+ − 32 if (defined $a or defined $b) {
+ − 33 return 0;
+ − 34 } else {
+ − 35 return 1;
+ − 36 }
+ − 37 }
+ − 38 }
+ − 39
+ − 40 sub isEquals {
+ − 41 my ($a,$b) = @_;
+ − 42
+ − 43 if (defined $a and defined $b) {
+ − 44 return $a == $b;
+ − 45 } else {
+ − 46 if (defined $a or defined $b) {
+ − 47 return 0;
+ − 48 } else {
+ − 49 return 1;
+ − 50 }
+ − 51 }
+ − 52 }
+ − 53
+ − 54 sub isSame {
+ − 55 my ($this,$other) = @_;
+ − 56
+ − 57 return ($this->{$Name} eq $other->{$Name} and $this->{$CanBeNull} == $other->{$CanBeNull} and isEqualsStr($this->{$DefaultValue}, $other->{$DefaultValue}) and $this->{$Type}->isSame($other->{$Type}));
+ − 58 }
+ − 59
+ − 60 1;