Changeset 24081
- Timestamp:
- 11/18/08 14:13:42 (5 years ago)
- Location:
- lang/perl/Data-Model/trunk
- Files:
-
- 1 added
- 3 modified
-
lib/Data/Model/Schema.pm (modified) (3 diffs)
-
lib/Data/Model/Schema/Properties.pm (modified) (3 diffs)
-
t/020_mock/create-sql.t (modified) (3 diffs)
-
t/lib/Mock/ColumnSuger.pm (added)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Data-Model/trunk/lib/Data/Model/Schema.pm
r23975 r24081 12 12 13 13 no strict 'refs'; 14 for my $name (qw/ driver install_model schema column columns key index unique schema_options /) {14 for my $name (qw/ driver install_model schema column columns key index unique schema_options add_column_suger /) { 15 15 *{"$caller\::$name"} = \&$name; 16 16 } … … 103 103 } 104 104 105 sub _column (@) {106 my($schema, $column, $type, $options) = @_;107 $schema->column->{$column} = +{108 type => $type || 'char',109 options => $options || +{},110 };111 }112 105 sub column ($;$;$) { 113 106 my($name, $schema) = _get_model_schema; … … 142 135 } 143 136 137 138 our $COLUMN_SUGER = +{}; 139 sub add_column_suger (@) { 140 my($column, $type, $options) = @_; 141 Carp::croak "usage: add_column_suger 'table_name.column_name' => type => { args };" 142 unless $column =~ /^[^\.+]+\.[^\.+]+$/; 143 144 $COLUMN_SUGER->{$column} = +{ 145 type => $type || 'char', 146 options => $options || +{}, 147 }; 148 } 149 144 150 1; 145 151 -
lang/perl/Data-Model/trunk/lib/Data/Model/Schema/Properties.pm
r23975 r24081 4 4 use base qw(Data::Model::Accessor); 5 5 6 use Data::Model::Schema; 6 7 use Data::Model::Schema::SQL; 7 8 … … 39 40 40 41 sub add_column { 41 my($self, $column, $type, $options) = @_; 42 my $self = shift; 43 my($column, $type, $options) = @_; 44 return $self->add_column_suger(@_) if $column =~ /^[^\.+]+\.[^\.+]+$/; 42 45 Carp::croak "Column can't be called '$column': reserved name" 43 46 if grep { lc $_ eq lc $column } @RESERVED; 47 44 48 push @{ $self->{columns} }, $column; 45 49 $self->{column}->{$column} = +{ … … 47 51 options => $options || +{}, 48 52 }; 53 } 54 55 sub add_column_suger { 56 my $self = shift; 57 my $name = shift; 58 my $suger = $Data::Model::Schema::COLUMN_SUGER; 59 Carp::croak "Undefined column of '$name'" 60 unless exists $suger->{$name} && $suger->{$name}; 61 62 my $conf = $suger->{$name}; 63 my %clone = ( 64 type => $conf->{type}, 65 options => +{ %{ $conf->{options} } }, 66 ); 67 my $column; 68 if (@_ == 0 || ref($_[0])) { 69 my $model; 70 ($model, $column) = split /\./, $name; 71 unless ($self->{model} eq $model) { 72 $column = join '_', $model, $column; 73 } 74 } else { 75 $column = shift; 76 } 77 if (@_ && ref($_[0]) eq 'HASH') { 78 $clone{options} = +{ %{ $clone{options} }, %{ ( shift ) } } 79 } 80 $self->add_column($column, $clone{type}, $clone{options}); 49 81 } 50 82 -
lang/perl/Data-Model/trunk/t/020_mock/create-sql.t
r23975 r24081 2 2 use Mock::Tests::Basic; 3 3 use Data::Model::Driver::DBI; 4 use Test::More tests => 8;4 use Test::More tests => 14; 5 5 6 6 BEGIN { … … 11 11 password => 'password', 12 12 ); 13 eval "use Mock::Basic"; $@ and die $@; 14 eval "use Mock::Index"; $@ and die $@; 13 use_ok('Mock::Basic'); 14 use_ok('Mock::Index'); 15 use_ok('Mock::ColumnSuger'); 15 16 } 16 17 … … 69 70 )"); 70 71 is($multi_index[1], "CREATE INDEX idx ON multi_index (idx1,idx2,idx3)"); 72 73 74 $mock = Mock::ColumnSuger->new; 75 76 my @author = $mock->get_schema('author')->sql->as_sql; 77 is($author[0], "CREATE TABLE author ( 78 id INTEGER NOT NULL PRIMARY KEY, 79 name VARCHAR(128) NOT NULL 80 )"); 81 82 my @book = $mock->get_schema('book')->sql->as_sql; 83 is($book[0], "CREATE TABLE book ( 84 id INTEGER NOT NULL PRIMARY KEY, 85 author_id INT UNSIGNED NOT NULL, 86 sub_author_id INT UNSIGNED NOT NULL, 87 title VARCHAR(255) NOT NULL, 88 description TEXT NOT NULL DEFAULT 'not yet writing', 89 recommend TEXT 90 )"); 91 is($book[1], "CREATE INDEX author_id ON book (author_id)");
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)