added EXPERIMENTAL DBIx::Custom::Model created_at and...
...updated_at attribute
... | ... |
@@ -162,7 +162,7 @@ sub column { |
162 | 162 |
my $table = $option->{alias} || $real_table; |
163 | 163 |
|
164 | 164 |
# Columns |
165 |
- unless ($columns) { |
|
165 |
+ unless (defined $columns) { |
|
166 | 166 |
$columns ||= $self->model($real_table)->columns; |
167 | 167 |
} |
168 | 168 |
|
... | ... |
@@ -924,7 +924,7 @@ sub select { |
924 | 924 |
else { $sql .= $self->_q($tables->[-1] || '') . ' ' } |
925 | 925 |
$sql =~ s/, $/ /; |
926 | 926 |
croak "select method table option must be specified " . _subname |
927 |
- unless $tables->[-1]; |
|
927 |
+ unless defined $tables->[-1]; |
|
928 | 928 |
|
929 | 929 |
# Add tables in parameter |
930 | 930 |
unshift @$tables, |
... | ... |
@@ -7,11 +7,8 @@ use DBIx::Custom::Util '_subname'; |
7 | 7 |
# Carp trust relationship |
8 | 8 |
push @DBIx::Custom::CARP_NOT, __PACKAGE__; |
9 | 9 |
|
10 |
-has [qw/dbi table/], |
|
11 |
- bind_type => sub { [] }, |
|
12 |
- columns => sub { [] }, |
|
13 |
- join => sub { [] }, |
|
14 |
- primary_key => sub { [] }; |
|
10 |
+has [qw/dbi table created_at updated_at bind_type join primary_key/], |
|
11 |
+ columns => sub { [] }; |
|
15 | 12 |
|
16 | 13 |
our $AUTOLOAD; |
17 | 14 |
|
... | ... |
@@ -44,13 +41,22 @@ for my $method (@methods) { |
44 | 41 |
|
45 | 42 |
my $code = sub { |
46 | 43 |
my $self = shift; |
44 |
+ |
|
45 |
+ unless ($self->{_attribute_cache}{$self}) { |
|
46 |
+ $self->$_ for qw/table bind_type primary_key |
|
47 |
+ type join created_at updated_at/; |
|
48 |
+ $self->{_attribute_cache}{$self} = 1; |
|
49 |
+ } |
|
50 |
+ |
|
47 | 51 |
$self->dbi->$method( |
48 | 52 |
@_ % 2 ? shift : (), |
49 |
- table => $self->table, |
|
50 |
- bind_type => $self->bind_type, |
|
51 |
- primary_key => $self->primary_key, |
|
52 |
- type => $self->type, |
|
53 |
- $method =~ /^select/ ? (join => $self->join) : (), |
|
53 |
+ table => $self->{table}, |
|
54 |
+ exists $self->{type} ? (type => $self->{type}) : (), |
|
55 |
+ exists $self->{created_at} && $method eq 'insert' ? (created_at => $self->{created_at}) : (), |
|
56 |
+ exists $self->{updated_at} && ($method eq 'insert' || $method eq 'update') ? (updated_at => $self->{updated_at}) : (), |
|
57 |
+ exists $self->{bind_type} ? (bind_type=> $self->{bind_type}) : (), |
|
58 |
+ exists $self->{primary_key} ? (primary_key => $self->{primary_key}) : (), |
|
59 |
+ exists $self->{join} && index($method, 'select') != -1 ? (join => $self->{join}) : (), |
|
54 | 60 |
@_ |
55 | 61 |
) |
56 | 62 |
}; |
... | ... |
@@ -112,7 +118,7 @@ sub new { |
112 | 118 |
# DEPRECATED! |
113 | 119 |
has 'filter'; |
114 | 120 |
has 'name'; |
115 |
-has type => sub { [] }; |
|
121 |
+has 'type'; |
|
116 | 122 |
|
117 | 123 |
|
118 | 124 |
# DEPRECATED! |
... | ... |
@@ -578,6 +578,41 @@ like($row->{$key2}, qr/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); |
578 | 578 |
like($row->{$key3}, qr/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); |
579 | 579 |
is($row->{$key2}, $row->{$key3}); |
580 | 580 |
|
581 |
+eval { $dbi->execute("drop table $table1") }; |
|
582 |
+$dbi->execute($create_table1_2); |
|
583 |
+$model = $dbi->create_model(table => $table1, created_at => $key2); |
|
584 |
+$param = {$key1 => 1}; |
|
585 |
+$model->insert($param); |
|
586 |
+$result = $dbi->select(table => $table1); |
|
587 |
+is_deeply($param, {$key1 => 1}); |
|
588 |
+$row = $result->one; |
|
589 |
+is($row->{$key1}, 1); |
|
590 |
+like($row->{$key2}, qr/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); |
|
591 |
+ |
|
592 |
+eval { $dbi->execute("drop table $table1") }; |
|
593 |
+$dbi->execute($create_table1_2); |
|
594 |
+$param = {$key1 => 1}; |
|
595 |
+$model = $dbi->create_model(table => $table1, updated_at => $key3); |
|
596 |
+$model->insert($param); |
|
597 |
+$result = $dbi->select(table => $table1); |
|
598 |
+is_deeply($param, {$key1 => 1}); |
|
599 |
+$row = $result->one; |
|
600 |
+is($row->{$key1}, 1); |
|
601 |
+like($row->{$key3}, qr/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); |
|
602 |
+ |
|
603 |
+eval { $dbi->execute("drop table $table1") }; |
|
604 |
+$dbi->execute($create_table1_2); |
|
605 |
+$param = {$key1 => 1}; |
|
606 |
+$model = $dbi->create_model(table => $table1, created_at => $key2, updated_at => $key3); |
|
607 |
+$model->insert($param); |
|
608 |
+$result = $dbi->select(table => $table1); |
|
609 |
+is_deeply($param, {$key1 => 1}); |
|
610 |
+$row = $result->one; |
|
611 |
+is($row->{$key1}, 1); |
|
612 |
+like($row->{$key2}, qr/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); |
|
613 |
+like($row->{$key3}, qr/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); |
|
614 |
+is($row->{$key2}, $row->{$key3}); |
|
615 |
+ |
|
581 | 616 |
test 'update_or_insert'; |
582 | 617 |
eval { $dbi->execute("drop table $table1") }; |
583 | 618 |
$dbi->execute($create_table1); |
... | ... |
@@ -847,6 +882,18 @@ $row = $result->one; |
847 | 882 |
is($row->{$key3}, 4); |
848 | 883 |
like($row->{$key2}, qr/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); |
849 | 884 |
|
885 |
+eval { $dbi->execute("drop table $table1") }; |
|
886 |
+$dbi->execute($create_table1_2); |
|
887 |
+$model = $dbi->create_model(table => $table1, updated_at => $key2); |
|
888 |
+$param = {$key3 => 4}; |
|
889 |
+$dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2, $key3 => 3}); |
|
890 |
+$model->update($param, where => {$key1 => 1}); |
|
891 |
+$result = $dbi->select(table => $table1); |
|
892 |
+is_deeply($param, {$key3 => 4}); |
|
893 |
+$row = $result->one; |
|
894 |
+is($row->{$key3}, 4); |
|
895 |
+like($row->{$key2}, qr/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/); |
|
896 |
+ |
|
850 | 897 |
test 'update_all'; |
851 | 898 |
eval { $dbi->execute("drop table $table1") }; |
852 | 899 |
$dbi->execute($create_table1_2); |
... | ... |
@@ -1,8 +1,8 @@ |
1 | 1 |
package MyModel4::table1; |
2 | 2 |
|
3 |
-use base 'MyModel4'; |
|
3 |
+use MyModel4 -base; |
|
4 | 4 |
|
5 |
-sub table { 'table1' } |
|
5 |
+has table => 'table1'; |
|
6 | 6 |
|
7 | 7 |
sub list { shift->select } |
8 | 8 |
|
... | ... |
@@ -1,8 +1,8 @@ |
1 | 1 |
package MyModel4::TABLE1; |
2 | 2 |
|
3 |
-use base 'MyModel4'; |
|
3 |
+use MyModel4 -base; |
|
4 | 4 |
|
5 |
-sub table { 'TABLE1' } |
|
5 |
+has table => 'TABLE1'; |
|
6 | 6 |
|
7 | 7 |
sub list { shift->select } |
8 | 8 |
|