49
|
1 package Schema::DB::Constraint;
|
|
2 use Common;
|
|
3 our @ISA = qw(Object);
|
|
4
|
|
5 BEGIN {
|
|
6 DeclareProperty Name => ACCESS_READ;
|
|
7 DeclareProperty Table => ACCESS_READ;
|
|
8 DeclareProperty Columns => ACCESS_READ;
|
|
9 }
|
|
10
|
|
11 sub CTOR {
|
|
12 my ($this,%args) = @_;
|
|
13 die new Exception("The table argument must be an instance of a table object") if not UNIVERSAL::isa($args{'Table'},'Schema::DB::Table');
|
|
14 $this->{$Name} = $args{'Name'};
|
|
15 $this->{$Table} = $args{'Table'};
|
|
16 $this->{$Columns} = [map { ResolveColumn($this->Table,$_) } @{$args{'Columns'}}];
|
|
17 }
|
|
18
|
|
19 sub ResolveColumn {
|
|
20 my ($Table,$Column) = @_;
|
|
21
|
|
22 my $cn = UNIVERSAL::isa($Column,'Schema::DB::Column') ? $Column->Name : $Column;
|
|
23
|
|
24 my $resolved = $Table->Column($cn);
|
|
25 die new Exception("The column is not found in the table", $cn, $Table->Name) if not $resolved;
|
|
26 return $resolved;
|
|
27 }
|
|
28
|
|
29 sub HasColumn {
|
|
30 my ($this,@Columns) = @_;
|
|
31
|
|
32 my %Columns = map { $_, 1} @Columns;
|
|
33
|
|
34 return scalar(grep { $Columns{$_->Name} } $this->Columns) == scalar(@Columns);
|
|
35 }
|
|
36
|
|
37 sub UniqName {
|
|
38 my ($this) = @_;
|
|
39 return $this->{$Table}->Name.'_'.$this->{$Name};
|
|
40 }
|
|
41
|
|
42 sub Dispose {
|
|
43 my ($this) = @_;
|
|
44
|
|
45 delete @$this{$Table,$Columns};
|
|
46 $this->SUPER::Dispose;
|
|
47 }
|
|
48 1;
|