Mercurial > pub > Impl
annotate Lib/IMPL/SQL/Schema/Constraint.pm @ 271:56364d0c4b4f
+IMPL::SQL::Schema::MySQL: added basic support for MySQL
author | cin |
---|---|
date | Mon, 28 Jan 2013 02:43:14 +0400 |
parents | 5c82eec23bb6 |
children | 4ddb27ff4a0b |
rev | line source |
---|---|
167 | 1 package IMPL::SQL::Schema::Constraint; |
49 | 2 use strict; |
167 | 3 use warnings; |
4 | |
271
56364d0c4b4f
+IMPL::SQL::Schema::MySQL: added basic support for MySQL
cin
parents:
232
diff
changeset
|
5 use IMPL::lang qw(:declare is isclass); |
167 | 6 |
165 | 7 use parent qw(IMPL::Object IMPL::Object::Disposable); |
49 | 8 |
9 use IMPL::Class::Property::Direct; | |
10 | |
11 BEGIN { | |
167 | 12 public _direct property name => PROP_GET; |
13 public _direct property table => PROP_GET; | |
49 | 14 } |
15 | |
167 | 16 public property columns => PROP_GET | PROP_LIST | PROP_OWNERSET; |
17 | |
168 | 18 my %aliases; |
19 | |
49 | 20 sub CTOR { |
21 my ($this,%args) = @_; | |
167 | 22 is( $args{table}, typeof IMPL::SQL::Schema::Table ) or |
194 | 23 die new IMPL::InvalidArgumentException("table argument must be a table object"); |
165 | 24 $this->{$name} = $args{'name'}; |
25 $this->{$table} = $args{'table'}; | |
167 | 26 $this->columns( [map { ResolveColumn($this->table,$_) } @{$args{'columns'}}] ); |
49 | 27 } |
28 | |
29 sub ResolveColumn { | |
30 my ($Table,$Column) = @_; | |
31 | |
271
56364d0c4b4f
+IMPL::SQL::Schema::MySQL: added basic support for MySQL
cin
parents:
232
diff
changeset
|
32 my $cn = is($Column,'IMPL::SQL::Schema::Column') ? $Column->name : $Column; |
49 | 33 |
168 | 34 my $resolved = $Table->GetColumn($cn); |
165 | 35 die new IMPL::InvalidOperationException("The column is not found in the table", $cn, $Table->name) if not $resolved; |
49 | 36 return $resolved; |
37 } | |
38 | |
39 sub HasColumn { | |
40 my ($this,@Columns) = @_; | |
41 | |
42 my %Columns = map { $_, 1} @Columns; | |
43 | |
168 | 44 return scalar(grep { $Columns{$_->name} } $this->columns ) == scalar(@Columns); |
49 | 45 } |
46 | |
165 | 47 sub uniqName { |
49 | 48 my ($this) = @_; |
165 | 49 return $this->{$table}->name.'_'.$this->{$name}; |
49 | 50 } |
51 | |
52 sub Dispose { | |
53 my ($this) = @_; | |
54 | |
167 | 55 $this->columns([]); |
56 | |
57 delete $$this{$table}; | |
58 | |
49 | 59 $this->SUPER::Dispose; |
60 } | |
167 | 61 |
62 sub SameValue { | |
194 | 63 my ($this,$other) = @_; |
64 | |
65 return 0 unless $this->columns->Count == $other->columns->Count; | |
66 | |
67 for ( my $i=0; $i < $this->columns->Count; $i++ ) { | |
68 return 0 unless $this->columns->[$i]->name eq $other->columns->[$i]->name; | |
69 } | |
70 | |
71 return 1; | |
167 | 72 } |
168 | 73 |
74 sub ResolveAlias { | |
194 | 75 my ($self,$alias) = @_; |
76 | |
271
56364d0c4b4f
+IMPL::SQL::Schema::MySQL: added basic support for MySQL
cin
parents:
232
diff
changeset
|
77 return isclass($alias, typeof IMPL::SQL::Schema::Constraint) ? $alias : $aliases{$alias}; |
168 | 78 } |
79 | |
80 sub RegisterAlias { | |
194 | 81 my ($self,$alias) = @_; |
82 | |
83 $aliases{$alias} = $self->typeof; | |
168 | 84 } |
85 | |
49 | 86 1; |