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;