49
|
1 package IMPL::SQL::Schema::Constraint::PrimaryKey;
|
|
2 use strict;
|
|
3 use base qw(IMPL::SQL::Schema::Constraint::Index);
|
|
4 use IMPL::Class::Property;
|
|
5 use IMPL::Class::Property::Direct;
|
|
6
|
|
7 __PACKAGE__->PassThroughArgs;
|
|
8
|
|
9 BEGIN {
|
|
10 public _direct property ConnectedFK => prop_get;
|
|
11 }
|
|
12
|
|
13 sub CTOR {
|
|
14 my ($this,%args) = @_;
|
|
15
|
|
16 $this->SUPER::CTOR(%args);
|
|
17
|
|
18 $this->{$ConnectedFK} = {};
|
|
19 }
|
|
20
|
|
21 sub ConnectFK {
|
|
22 my ($this,$FK) = @_;
|
|
23
|
|
24 UNIVERSAL::isa($FK,'IMPL::SQL::Schema::Constraint::ForeignKey') or die new Exception('Aprimary key could be connected only to a foreign key');
|
|
25 not exists $this->{$ConnectedFK}->{$FK->UniqName} or die new Exception('This primary key already conneted with the specified foreing key',$FK->Name,$FK->Table->Name);
|
|
26
|
|
27 $this->{$ConnectedFK}->{$FK->UniqName} = $FK;
|
|
28 }
|
|
29
|
|
30 sub DisconnectFK {
|
|
31 my ($this,$FK) = @_;
|
|
32
|
|
33 delete $this->{$ConnectedFK}->{$FK->UniqName};
|
|
34 }
|
|
35
|
|
36 sub Dispose {
|
|
37 my ($this) = @_;
|
|
38
|
|
39 delete $this->{$ConnectedFK};
|
|
40 $this->SUPER::Dispose;
|
|
41 }
|
|
42
|
|
43 1;
|