Mercurial > pub > Impl
comparison Lib/IMPL/SQL/Schema/Table.pm @ 168:6148f89bb7bf
IMPL::SQL::Schema::Traits::Diff alfa version
IMPL::lang added hash traits
author | sourcer |
---|---|
date | Mon, 16 May 2011 04:30:38 +0400 |
parents | 1f7a6d762394 |
children | 4d0e1962161c |
comparison
equal
deleted
inserted
replaced
167:1f7a6d762394 | 168:6148f89bb7bf |
---|---|
120 | 120 |
121 return scalar(@{$this->{$columns}}); | 121 return scalar(@{$this->{$columns}}); |
122 } | 122 } |
123 | 123 |
124 sub AddConstraint { | 124 sub AddConstraint { |
125 my ($this,$Constraint) = @_; | 125 my $this = shift; |
126 | 126 if (@_ == 1) { |
127 if (ref $Constraint eq 'HASH') { | 127 my ($Constraint) = @_; |
128 $Constraint = new IMPL::SQL::Schema::Constraint( %$Constraint, table => $this ); | 128 |
129 } else { | 129 die new IMPL::InvalidArgumentException('The invalid parameter') if not is($Constraint,typeof IMPL::SQL::Schema::Constraint); |
130 die new IMPL::InvalidArgumentException('The invalid parameter') if not is($Constraint,typeof IMPL::SQL::Schema::Constraint); | 130 |
131 } | 131 $Constraint->table == $this or die new IMPL::InvalidOperationException('The constaint must belong to the target table'); |
132 | 132 |
133 $Constraint->table == $this or die new IMPL::InvalidOperationException('The constaint must belong to the target table'); | 133 if (exists $this->{$constraints}->{$Constraint->name}) { |
134 | 134 die new IMPL::InvalidOperationException('The table already has the specified constraint',$Constraint->name); |
135 if (exists $this->{$constraints}->{$Constraint->name}) { | 135 } else { |
136 die new IMPL::InvalidOperationException('The table already has the specified constraint',$Constraint->name); | 136 if (UNIVERSAL::isa($Constraint,'IMPL::SQL::Schema::Constraint::PrimaryKey')) { |
137 } else { | 137 not $this->{$primaryKey} or die new IMPL::InvalidOperationException('The table already has a primary key'); |
138 if (UNIVERSAL::isa($Constraint,'IMPL::SQL::Schema::Constraint::PrimaryKey')) { | 138 $this->{$primaryKey} = $Constraint; |
139 not $this->{$primaryKey} or die new IMPL::InvalidOperationException('The table already has a primary key'); | 139 } |
140 $this->{$primaryKey} = $Constraint; | 140 |
141 } | 141 $this->{$constraints}->{$Constraint->name} = $Constraint; |
142 | 142 } |
143 $this->{$constraints}->{$Constraint->name} = $Constraint; | 143 } elsif( @_ == 2) { |
144 my ($type,$params) = @_; | |
145 | |
146 $type = IMPL::SQL::Schema::Constraint->ResolveAlias($type) or | |
147 die new IMPL::Exception("Can't resolve a constraint alias",$_[0]); | |
148 | |
149 $params->{table} = $this; | |
150 | |
151 $this->AddConstraint($type->new(%$params)); | |
152 } else { | |
153 die new IMPL::Exception("Wrong arguments number",scalar(@_)); | |
144 } | 154 } |
145 } | 155 } |
146 | 156 |
147 sub RemoveConstraint { | 157 sub RemoveConstraint { |
148 my ($this,$Constraint,$Force) = @_; | 158 my ($this,$Constraint,$Force) = @_; |
189 | 199 |
190 sub LinkTo { | 200 sub LinkTo { |
191 my ($this,$table,@ColumnList) = @_; | 201 my ($this,$table,@ColumnList) = @_; |
192 $table->primaryKey or die new IMPL::InvalidOperationException('The referenced table must have a primary key'); | 202 $table->primaryKey or die new IMPL::InvalidOperationException('The referenced table must have a primary key'); |
193 my $constraintName = $this->{$name}.'_'.$table->name.'_FK_'.join('_',map {ref $_ ? $_->name : $_} @ColumnList); | 203 my $constraintName = $this->{$name}.'_'.$table->name.'_FK_'.join('_',map {ref $_ ? $_->name : $_} @ColumnList); |
194 $this->AddConstraint(new IMPL::SQL::Schema::Constraint::ForeignKey(name => $constraintName, table => $this, columns => \@ColumnList, referencedTable => $table, referencedColumns => scalar $table->primaryKey->columns)); | 204 $this->AddConstraint(new IMPL::SQL::Schema::Constraint::ForeignKey(name => $constraintName, table => $this, columns => \@ColumnList, referencedTable => $table, referencedColumns => $table->primaryKey->columns->as_list)); |
195 } | 205 } |
196 | 206 |
197 sub Dispose { | 207 sub Dispose { |
198 my ($this) = @_; | 208 my ($this) = @_; |
199 | 209 |