Mercurial > pub > Impl
comparison Lib/IMPL/SQL/Schema/Traits.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 | fd92830036c3 |
comparison
equal
deleted
inserted
replaced
| 167:1f7a6d762394 | 168:6148f89bb7bf |
|---|---|
| 4 use IMPL::Exception(); | 4 use IMPL::Exception(); |
| 5 | 5 |
| 6 use parent qw(IMPL::Object); | 6 use parent qw(IMPL::Object); |
| 7 use IMPL::Code::Loader(); | 7 use IMPL::Code::Loader(); |
| 8 | 8 |
| 9 BEGIN { | 9 # required for use with typeof operator |
| 10 IMPL::Code::Loader->Provide(__PACKAGE__); | 10 use IMPL::SQL::Schema::Constraint::PrimaryKey(); |
| 11 } | 11 use IMPL::SQL::Schema::Constraint::Index(); |
| 12 use IMPL::SQL::Schema::Constraint::Unique(); | |
| 13 use IMPL::SQL::Schema::Constraint::ForeignKey(); | |
| 12 | 14 |
| 13 ################################################### | 15 ################################################### |
| 14 | 16 |
| 15 package IMPL::SQL::Schema::Traits::Table; | 17 package IMPL::SQL::Schema::Traits::Table; |
| 16 use base qw(IMPL::Object::Fields); | 18 use base qw(IMPL::Object::Fields); |
| 66 | 68 |
| 67 sub CTOR { | 69 sub CTOR { |
| 68 my ($this, $name, $columns) = @_; | 70 my ($this, $name, $columns) = @_; |
| 69 | 71 |
| 70 $this->{name} = $name; | 72 $this->{name} = $name; |
| 71 $$this->{columns} = $columns; # list of columnNames | 73 $this->{columns} = $columns; # list of columnNames |
| 74 } | |
| 75 | |
| 76 sub constraintClass { | |
| 77 die new IMPL::NotImplementedException(); | |
| 72 } | 78 } |
| 73 | 79 |
| 74 ################################################## | 80 ################################################## |
| 75 | 81 |
| 76 package IMPL::SQL::Schema::Traits::PrimaryKey; | 82 package IMPL::SQL::Schema::Traits::PrimaryKey; |
| 77 | 83 |
| 78 use base qw(IMPL::SQL::Schema::Traits::Constraint); | 84 use base qw(IMPL::SQL::Schema::Traits::Constraint); |
| 79 | 85 |
| 80 __PACKAGE__->PassThroughArgs; | 86 __PACKAGE__->PassThroughArgs; |
| 81 | 87 |
| 88 use constant { constraintClass => typeof IMPL::SQL::Schema::Constraint::PrimaryKey }; | |
| 89 | |
| 82 ################################################## | 90 ################################################## |
| 83 | 91 |
| 84 package IMPL::SQL::Schema::Traits::Index; | 92 package IMPL::SQL::Schema::Traits::Index; |
| 85 | 93 |
| 86 use base qw(IMPL::SQL::Schema::Traits::Constraint); | 94 use base qw(IMPL::SQL::Schema::Traits::Constraint); |
| 87 | 95 |
| 88 __PACKAGE__->PassThroughArgs; | 96 __PACKAGE__->PassThroughArgs; |
| 89 | 97 |
| 98 use constant { constraintClass => typeof IMPL::SQL::Schema::Constraint::Index }; | |
| 99 | |
| 90 ################################################## | 100 ################################################## |
| 91 | 101 |
| 92 package IMPL::SQL::Schema::Traits::Unique; | 102 package IMPL::SQL::Schema::Traits::Unique; |
| 93 | 103 |
| 94 use base qw(IMPL::SQL::Schema::Traits::Constraint); | 104 use base qw(IMPL::SQL::Schema::Traits::Constraint); |
| 95 | 105 |
| 96 __PACKAGE__->PassThroughArgs; | 106 __PACKAGE__->PassThroughArgs; |
| 107 | |
| 108 use constant { constraintClass => typeof IMPL::SQL::Schema::Constraint::Unique }; | |
| 97 | 109 |
| 98 ################################################## | 110 ################################################## |
| 99 | 111 |
| 100 package IMPL::SQL::Schema::Traits::ForeignKey; | 112 package IMPL::SQL::Schema::Traits::ForeignKey; |
| 101 | 113 |
| 103 use fields qw( | 115 use fields qw( |
| 104 foreignTable | 116 foreignTable |
| 105 foreignColumns | 117 foreignColumns |
| 106 ); | 118 ); |
| 107 | 119 |
| 120 use constant { constraintClass => typeof IMPL::SQL::Schema::Constraint::ForeignKey }; | |
| 121 | |
| 108 our %CTOR = ( | 122 our %CTOR = ( |
| 109 'IMPL::SQL::Schema::Traits::Constraint' => sub { @_[0..1] } | 123 'IMPL::SQL::Schema::Traits::Constraint' => sub { @_[0..1] } |
| 110 ); | 124 ); |
| 111 | 125 |
| 112 sub CTOR { | 126 sub CTOR { |
| 272 use IMPL::Class::Property; | 286 use IMPL::Class::Property; |
| 273 | 287 |
| 274 BEGIN { | 288 BEGIN { |
| 275 public property tableName => prop_get | owner_set; | 289 public property tableName => prop_get | owner_set; |
| 276 public property columnName => prop_get | owner_set; | 290 public property columnName => prop_get | owner_set; |
| 277 public property columnType => prop_get | owner_set; | 291 public property columnType => prop_all; |
| 278 public property defaultValue => prop_get | owner_set; | 292 public property defaultValue => prop_all; |
| 279 public property isNullable => prop_get | owner_set; | 293 public property isNullable => prop_all; |
| 280 public property options => prop_get | owner_set; | 294 public property options => prop_all; # hash diff format, (keys have a prefix '+' - add or update value, '-' remove value) |
| 281 } | 295 } |
| 282 | 296 |
| 283 sub CTOR { | 297 sub CTOR { |
| 284 my ($this, $table,$column,%args) = @_; | 298 my ($this, $table,$column,%args) = @_; |
| 285 | 299 |
| 295 | 309 |
| 296 local $@; | 310 local $@; |
| 297 | 311 |
| 298 return eval { | 312 return eval { |
| 299 my $column = $schema->GetTable($this->tableName)->GetColumn($this->columnName); | 313 my $column = $schema->GetTable($this->tableName)->GetColumn($this->columnName); |
| 300 $column->SetType($this->columnType) if $this->columnType; | 314 $column->SetType($this->columnType) if defined $this->columnType; |
| 301 $column->SetNullable($this->isNullable) if $this->isNullable; | 315 $column->SetNullable($this->isNullable) if defined $this->isNullable; |
| 302 $column->SetDefaultValue($this->defaultValue) if $this->defaultValue; | 316 $column->SetDefaultValue($this->defaultValue) if defined $this->defaultValue; |
| 303 $column->SetOptions($this->options) if $this->options; | 317 $column->SetOptions($this->options) if defined $this->options; |
| 304 | 318 |
| 305 return 1; | 319 return 1; |
| 306 } || 0; | 320 } || 0; |
| 307 } | 321 } |
| 308 | 322 |
| 333 my ($this,$schema) = @_; | 347 my ($this,$schema) = @_; |
| 334 | 348 |
| 335 local $@; | 349 local $@; |
| 336 | 350 |
| 337 return eval { | 351 return eval { |
| 338 $schema->GetTable($this->tableName)->AddConstraint($this->constraint); | 352 $schema->GetTable($this->tableName)->AddConstraint($this->constraint->constraintClass, $this->constraint); |
| 339 return 1; | 353 return 1; |
| 340 } || 0; | 354 } || 0; |
| 341 | 355 |
| 342 } | 356 } |
| 343 | 357 |
