comparison lib/IMPL/SQL/Schema/Constraint.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children 3ed0c58e9da3
comparison
equal deleted inserted replaced
406:f23fcb19d3c1 407:c6e90e02dd17
1 package IMPL::SQL::Schema::Constraint;
2 use strict;
3 use warnings;
4
5 use IMPL::lang;
6 use IMPL::Const qw(:prop);
7 use IMPL::declare {
8 base => [
9 'IMPL::Object' => undef,
10 'IMPL::Object::Disposable' => undef
11 ],
12 props => [
13 name => PROP_RO | PROP_DIRECT,
14 table => PROP_RO | PROP_DIRECT,
15 columns => PROP_RO | PROP_LIST
16 ]
17 };
18
19 my %aliases;
20
21 sub CTOR {
22 my ($this,%args) = @_;
23 is( $args{table}, typeof IMPL::SQL::Schema::Table ) or
24 die new IMPL::InvalidArgumentException("table argument must be a table object");
25 $this->{$name} = $args{'name'};
26 $this->{$table} = $args{'table'};
27 $this->columns( [map { ResolveColumn($this->table,$_) } @{$args{'columns'}}] );
28 }
29
30 sub ResolveColumn {
31 my ($Table,$Column) = @_;
32
33 my $cn = is($Column,'IMPL::SQL::Schema::Column') ? $Column->name : $Column;
34
35 my $resolved = $Table->GetColumn($cn);
36 die new IMPL::InvalidOperationException("The column is not found in the table", $cn, $Table->name) if not $resolved;
37 return $resolved;
38 }
39
40 sub HasColumn {
41 my ($this,@Columns) = @_;
42
43 my %Columns = map { $_, 1} @Columns;
44
45 return scalar(grep { $Columns{$_->name} } $this->columns ) == scalar(@Columns);
46 }
47
48 sub uniqName {
49 my ($this) = @_;
50 return $this->{$table}->name.'_'.$this->{$name};
51 }
52
53 sub Dispose {
54 my ($this) = @_;
55
56 $this->columns([]);
57
58 delete $$this{$table};
59
60 $this->SUPER::Dispose;
61 }
62
63 sub SameValue {
64 my ($this,$other) = @_;
65
66 return 0 unless $this->columns->Count == $other->columns->Count;
67
68 for ( my $i=0; $i < $this->columns->Count; $i++ ) {
69 return 0 unless $this->columns->[$i]->name eq $other->columns->[$i]->name;
70 }
71
72 return 1;
73 }
74
75 sub ResolveAlias {
76 my ($self,$alias) = @_;
77
78 return isclass($alias, typeof IMPL::SQL::Schema::Constraint) ? $alias : $aliases{$alias};
79 }
80
81 sub RegisterAlias {
82 my ($self,$alias) = @_;
83
84 $aliases{$alias} = typeof($self);
85 }
86
87 1;