Mercurial > pub > Impl
comparison Lib/IMPL/SQL/Schema.pm @ 194:4d0e1962161c
Replaced tabs with spaces
IMPL::Web::View - fixed document model, new features (control classes, document constructor parameters)
| author | cin | 
|---|---|
| date | Tue, 10 Apr 2012 20:08:29 +0400 | 
| parents | d1676be8afcc | 
| children | 5c82eec23bb6 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 193:8e8401c0aea4 | 194:4d0e1962161c | 
|---|---|
| 4 use IMPL::_core::version; | 4 use IMPL::_core::version; | 
| 5 | 5 | 
| 6 use IMPL::lang qw(is :declare :constants); | 6 use IMPL::lang qw(is :declare :constants); | 
| 7 | 7 | 
| 8 use parent qw( | 8 use parent qw( | 
| 9 IMPL::Object | 9 IMPL::Object | 
| 10 IMPL::Object::Disposable | 10 IMPL::Object::Disposable | 
| 11 IMPL::Object::Autofill | 11 IMPL::Object::Autofill | 
| 12 IMPL::Object::Clonable | 12 IMPL::Object::Clonable | 
| 13 ); | 13 ); | 
| 14 | 14 | 
| 15 use IMPL::Class::Property::Direct; | 15 use IMPL::Class::Property::Direct; | 
| 16 | 16 | 
| 17 require IMPL::SQL::Schema::Table; | 17 require IMPL::SQL::Schema::Table; | 
| 31 | 31 | 
| 32 $table->Schema == $this or die new IMPL::InvalidOperationException('The specified table must belong to the database'); | 32 $table->Schema == $this or die new IMPL::InvalidOperationException('The specified table must belong to the database'); | 
| 33 not exists $this->{$tables}->{$table->name} or die new IMPL::InvalidOperationException('a table with the same name already exists in the database'); | 33 not exists $this->{$tables}->{$table->name} or die new IMPL::InvalidOperationException('a table with the same name already exists in the database'); | 
| 34 | 34 | 
| 35 } elsif (UNIVERSAL::isa($table,'HASH')) { | 35 } elsif (UNIVERSAL::isa($table,'HASH')) { | 
| 36 | 36 | 
| 37 not exists $this->{$tables}->{$table->{'name'}} or die new IMPL::InvalidOperationException('a table with the same name already exists in the database'); | 37 not exists $this->{$tables}->{$table->{'name'}} or die new IMPL::InvalidOperationException('a table with the same name already exists in the database'); | 
| 38 $table = { %$table }; | 38 $table = { %$table }; | 
| 39 $table->{'schema'} = $this; | 39 $table->{'schema'} = $this; | 
| 40 $table = new IMPL::SQL::Schema::Table(%{$table}); | 40 $table = new IMPL::SQL::Schema::Table(%{$table}); | 
| 41 } else { | 41 } else { | 
| 42 die new IMPL::InvalidArgumentException('Either a table object or a hash with table parameters is required'); | 42 die new IMPL::InvalidArgumentException('Either a table object or a hash with table parameters is required'); | 
| 43 } | 43 } | 
| 60 | 60 | 
| 61 return 1; | 61 return 1; | 
| 62 } | 62 } | 
| 63 | 63 | 
| 64 sub ResolveTable { | 64 sub ResolveTable { | 
| 65 my ($this,$table) = @_; | 65 my ($this,$table) = @_; | 
| 66 | 66 | 
| 67 UNIVERSAL::isa($table,'IMPL::SQL::Schema::Table') ? $table : $this->{$tables}{$table}; | 67 UNIVERSAL::isa($table,'IMPL::SQL::Schema::Table') ? $table : $this->{$tables}{$table}; | 
| 68 } | 68 } | 
| 69 | 69 | 
| 70 sub GetTable { | 70 sub GetTable { | 
| 71 my ($this,$tableName) = @_; | 71 my ($this,$tableName) = @_; | 
| 72 return $this->{$tables}{$tableName}; | 72 return $this->{$tables}{$tableName}; | 
| 73 } | 73 } | 
| 74 | 74 | 
| 75 sub GetTables { | 75 sub GetTables { | 
| 76 my ($this) = @_; | 76 my ($this) = @_; | 
| 77 | 77 | 
| 78 return wantarray ? values %{$this->{$tables}} : [values %{$this->{$tables}}]; | 78 return wantarray ? values %{$this->{$tables}} : [values %{$this->{$tables}}]; | 
| 79 } | 79 } | 
| 80 | 80 | 
| 81 sub RenameTable { | 81 sub RenameTable { | 
| 82 my ($this,$oldName,$newName) = @_; | 82 my ($this,$oldName,$newName) = @_; | 
| 83 | 83 | 
| 84 die new IMPL::InvalidOperationException("A source table doesn't exists", $oldName) unless exists $this->{$tables}{$oldName}; | 84 die new IMPL::InvalidOperationException("A source table doesn't exists", $oldName) unless exists $this->{$tables}{$oldName}; | 
| 85 die new IMPL::InvalidOperationException("A target table already exists", $newName) if exists $this->{$tables}{$newName}; | 85 die new IMPL::InvalidOperationException("A target table already exists", $newName) if exists $this->{$tables}{$newName}; | 
| 86 | 86 | 
| 87 my $table = delete $this->{$tables}{$oldName}; | 87 my $table = delete $this->{$tables}{$oldName}; | 
| 88 $table->_setName($newName); | 88 $table->_setName($newName); | 
| 89 $this->{$tables}{$newName} = $table; | 89 $this->{$tables}{$newName} = $table; | 
| 90 } | 90 } | 
| 91 | 91 | 
| 92 sub Dispose { | 92 sub Dispose { | 
| 93 my ($this) = @_; | 93 my ($this) = @_; | 
| 94 | 94 | 
