- added EXPERIMENTAL update_timestamp method to...
...DBIx::Custom
... | ... |
@@ -1,3 +1,7 @@ |
1 |
+0.1723 |
|
2 |
+ - added EXPERIMENTAL update_timestamp method to DBIx::Custom |
|
3 |
+ - added EXPERIMENTAL insert_timestamp method to DBIx::Custom |
|
4 |
+ - removed EXPERIMENTAL timestamp attribute from DBIx::Custom |
|
1 | 5 |
0.1722 |
2 | 6 |
- added EXPERIMENTAL timestamp option to DBIx::Custom insert |
3 | 7 |
and update method. |
... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
package DBIx::Custom; |
2 | 2 |
use Object::Simple -base; |
3 | 3 |
|
4 |
-our $VERSION = '0.1722'; |
|
4 |
+our $VERSION = '0.1723'; |
|
5 | 5 |
use 5.008001; |
6 | 6 |
|
7 | 7 |
use Carp 'croak'; |
... | ... |
@@ -65,8 +65,7 @@ has [qw/connector dsn password quote user exclude_table user_table_info |
65 | 65 |
safety_character => '\w', |
66 | 66 |
separator => '.', |
67 | 67 |
stash => sub { {} }, |
68 |
- tag_parse => 1, |
|
69 |
- timestamp => sub { {} }; |
|
68 |
+ tag_parse => 1; |
|
70 | 69 |
|
71 | 70 |
sub available_datatype { |
72 | 71 |
my $self = shift; |
... | ... |
@@ -618,15 +617,12 @@ sub insert { |
618 | 617 |
my $timestamp = $args{timestamp}; |
619 | 618 |
|
620 | 619 |
# Timestamp |
621 |
- if ($timestamp) { |
|
622 |
- my $column = $self->timestamp->{insert}[0]; |
|
623 |
- my $v = $self->timestamp->{insert}[1]; |
|
624 |
- my $value; |
|
625 |
- |
|
626 |
- if (defined $column && defined $v) { |
|
627 |
- $value = ref $v eq 'SCALAR' ? $v : \$v; |
|
628 |
- $param->{$column} = $value; |
|
629 |
- } |
|
620 |
+ if ($timestamp && (my $insert_timestamp = $self->insert_timestamp)) { |
|
621 |
+ my $columns = $insert_timestamp->[0]; |
|
622 |
+ $columns = [$columns] unless ref $columns eq 'ARRAY'; |
|
623 |
+ my $value = $insert_timestamp->[1]; |
|
624 |
+ $value = $value->() if ref $value eq 'CODE'; |
|
625 |
+ $param->{$_} = $value for @$columns; |
|
630 | 626 |
} |
631 | 627 |
|
632 | 628 |
# Merge parameter |
... | ... |
@@ -674,6 +670,17 @@ sub insert_param { |
674 | 670 |
'(' . join(', ', @placeholders) . ')' |
675 | 671 |
} |
676 | 672 |
|
673 |
+sub insert_timestamp { |
|
674 |
+ my $self = shift; |
|
675 |
+ |
|
676 |
+ if (@_) { |
|
677 |
+ $self->{insert_timestamp} = [@_]; |
|
678 |
+ |
|
679 |
+ return $self; |
|
680 |
+ } |
|
681 |
+ return $self->{insert_timestamp}; |
|
682 |
+} |
|
683 |
+ |
|
677 | 684 |
sub include_model { |
678 | 685 |
my ($self, $name_space, $model_infos) = @_; |
679 | 686 |
|
... | ... |
@@ -1166,18 +1173,14 @@ sub update { |
1166 | 1173 |
my $timestamp = $args{timestamp}; |
1167 | 1174 |
|
1168 | 1175 |
# Timestamp |
1169 |
- if ($timestamp) { |
|
1170 |
- my $column = $self->timestamp->{update}[0]; |
|
1171 |
- my $v = $self->timestamp->{update}[1]; |
|
1172 |
- my $value; |
|
1173 |
- |
|
1174 |
- if (defined $column && defined $v) { |
|
1175 |
- $value = ref $v eq 'SCALAR' ? $v : \$v; |
|
1176 |
- $param->{$column} = $value; |
|
1177 |
- } |
|
1176 |
+ if ($timestamp && (my $update_timestamp = $self->update_timestamp)) { |
|
1177 |
+ my $columns = $update_timestamp->[0]; |
|
1178 |
+ $columns = [$columns] unless ref $columns eq 'ARRAY'; |
|
1179 |
+ my $value = $update_timestamp->[1]; |
|
1180 |
+ $value = $value->() if ref $value eq 'CODE'; |
|
1181 |
+ $param->{$_} = $value for @$columns; |
|
1178 | 1182 |
} |
1179 | 1183 |
|
1180 |
- |
|
1181 | 1184 |
# Update clause |
1182 | 1185 |
my $update_clause = $self->update_param($param, {wrap => $wrap}); |
1183 | 1186 |
|
... | ... |
@@ -1230,6 +1233,17 @@ sub update_param { |
1230 | 1233 |
return $tag; |
1231 | 1234 |
} |
1232 | 1235 |
|
1236 |
+sub update_timestamp { |
|
1237 |
+ my $self = shift; |
|
1238 |
+ |
|
1239 |
+ if (@_) { |
|
1240 |
+ $self->{update_timestamp} = [@_]; |
|
1241 |
+ |
|
1242 |
+ return $self; |
|
1243 |
+ } |
|
1244 |
+ return $self->{update_timestamp}; |
|
1245 |
+} |
|
1246 |
+ |
|
1233 | 1247 |
sub where { DBIx::Custom::Where->new(dbi => shift, @_) } |
1234 | 1248 |
|
1235 | 1249 |
sub _create_query { |
... | ... |
@@ -2213,27 +2227,6 @@ The performance is up. |
2213 | 2227 |
Enable DEPRECATED tag parsing functionality, default to 1. |
2214 | 2228 |
If you want to disable tag parsing functionality, set to 0. |
2215 | 2229 |
|
2216 |
-=head2 C<timestamp EXPERIMENTAL> |
|
2217 |
- |
|
2218 |
- my $timestamp = $dbi->timestamp($timestamp); |
|
2219 |
- $dbi = $dbi->timestamp; |
|
2220 |
- |
|
2221 |
-Timestamp information. |
|
2222 |
- |
|
2223 |
- $dbi->timestamp({ |
|
2224 |
- insert => [created_at => 'NOW()'], |
|
2225 |
- update => [updated_at => 'NOW()'] |
|
2226 |
- }); |
|
2227 |
- |
|
2228 |
-This value is used when C<insert> or C<update> method's C<timestamp> |
|
2229 |
-option is specified. |
|
2230 |
- |
|
2231 |
-C<insert> is used by C<insert> method, and C<update> is |
|
2232 |
-used by C<update> method. |
|
2233 |
- |
|
2234 |
-Key, such as C<create_at> is column name. |
|
2235 |
-value such as C<NOW()> is DB function. |
|
2236 |
- |
|
2237 | 2230 |
=head2 C<user> |
2238 | 2231 |
|
2239 | 2232 |
my $user = $dbi->user; |
... | ... |
@@ -2917,6 +2910,14 @@ You can get model object by C<model>. |
2917 | 2910 |
|
2918 | 2911 |
See L<DBIx::Custom::Model> to know model features. |
2919 | 2912 |
|
2913 |
+=head2 C<insert_timestamp EXPERIMENTAL> |
|
2914 |
+ |
|
2915 |
+ $dbi->insert_timestamp( |
|
2916 |
+ [qw/created_at updated_at/] => sub { localtime }); |
|
2917 |
+ |
|
2918 |
+Parameter for timestamp columns when C<insert> method is executed |
|
2919 |
+with C<timestamp> option. |
|
2920 |
+ |
|
2920 | 2921 |
=head2 C<mapper EXPERIMETNAL> |
2921 | 2922 |
|
2922 | 2923 |
my $mapper = $dbi->mapper(param => $param); |
... | ... |
@@ -3483,6 +3484,13 @@ Create update parameter tag. |
3483 | 3484 |
|
3484 | 3485 |
set title = :title, author = :author |
3485 | 3486 |
|
3487 |
+=head2 C<insert_timestamp EXPERIMENTAL> |
|
3488 |
+ |
|
3489 |
+ $dbi->update_timestamp(updated_at => sub { localtime }); |
|
3490 |
+ |
|
3491 |
+Parameter for timestamp columns when C<update> method is executed |
|
3492 |
+with C<timestamp> option. |
|
3493 |
+ |
|
3486 | 3494 |
=head2 C<where> |
3487 | 3495 |
|
3488 | 3496 |
my $where = $dbi->where( |
... | ... |
@@ -3499,13 +3507,6 @@ Create a new L<DBIx::Custom::Where> object. |
3499 | 3507 |
Setup all model objects. |
3500 | 3508 |
C<columns> of model object is automatically set, parsing database information. |
3501 | 3509 |
|
3502 |
-=head1 ENVIRONMENTAL VARIABLES |
|
3503 |
- |
|
3504 |
-=head2 C<DBIX_CUSTOM_DEBUG> |
|
3505 |
- |
|
3506 |
-If environment variable C<DBIX_CUSTOM_DEBUG> is set to true, |
|
3507 |
-executed SQL and bind values are printed to STDERR. |
|
3508 |
- |
|
3509 | 3510 |
=head2 C<show_datatype EXPERIMENTAL> |
3510 | 3511 |
|
3511 | 3512 |
$dbi->show_datatype($table); |
... | ... |
@@ -3536,6 +3537,13 @@ Show type name of the columns of specified table. |
3536 | 3537 |
|
3537 | 3538 |
This type name is used in C<type_rule>'s C<into1> and C<into2>. |
3538 | 3539 |
|
3540 |
+=head1 ENVIRONMENTAL VARIABLES |
|
3541 |
+ |
|
3542 |
+=head2 C<DBIX_CUSTOM_DEBUG> |
|
3543 |
+ |
|
3544 |
+If environment variable C<DBIX_CUSTOM_DEBUG> is set to true, |
|
3545 |
+executed SQL and bind values are printed to STDERR. |
|
3546 |
+ |
|
3539 | 3547 |
=head2 C<DBIX_CUSTOM_DEBUG_ENCODING> |
3540 | 3548 |
|
3541 | 3549 |
DEBUG output encoding. Default to UTF-8. |
... | ... |
@@ -508,14 +508,34 @@ is_deeply($rows, [{$key1 => 0, $key2 => 2}, {$key1 => 3, $key2 => 4}], "basic"); |
508 | 508 |
|
509 | 509 |
eval { $dbi->execute("drop table $table1") }; |
510 | 510 |
$dbi->execute($create_table1); |
511 |
-$dbi->timestamp({ |
|
512 |
- insert => [$key1 => '5'] |
|
513 |
-}); |
|
511 |
+$dbi->insert_timestamp( |
|
512 |
+ $key1 => '5' |
|
513 |
+); |
|
514 | 514 |
$dbi->insert(table => $table1, param => {$key2 => 2}, timestamp => 1); |
515 | 515 |
$result = $dbi->execute("select * from $table1"); |
516 | 516 |
$rows = $result->all; |
517 | 517 |
is_deeply($rows, [{$key1 => 5, $key2 => 2}], "basic"); |
518 | 518 |
|
519 |
+eval { $dbi->execute("drop table $table1") }; |
|
520 |
+$dbi->execute($create_table1); |
|
521 |
+$dbi->insert_timestamp( |
|
522 |
+ [$key1, $key2] => sub { 5 } |
|
523 |
+); |
|
524 |
+$dbi->insert(table => $table1, timestamp => 1); |
|
525 |
+$result = $dbi->execute("select * from $table1"); |
|
526 |
+$rows = $result->all; |
|
527 |
+is_deeply($rows, [{$key1 => 5, $key2 => 5}], "basic"); |
|
528 |
+ |
|
529 |
+eval { $dbi->execute("drop table $table1") }; |
|
530 |
+$dbi->execute($create_table1); |
|
531 |
+$dbi->insert_timestamp( |
|
532 |
+ [$key1, $key2] => sub { "" . DBIx::Custom->new } |
|
533 |
+); |
|
534 |
+$dbi->insert(table => $table1, timestamp => 1); |
|
535 |
+$result = $dbi->execute("select * from $table1"); |
|
536 |
+$rows = $result->all; |
|
537 |
+is($rows->[0]->{$key1}, $rows->[0]->{$key2}); |
|
538 |
+ |
|
519 | 539 |
test 'update'; |
520 | 540 |
eval { $dbi->execute("drop table $table1") }; |
521 | 541 |
$dbi->execute($create_table1_2); |
... | ... |
@@ -665,15 +685,37 @@ is_deeply($rows, [{$key1 => 1, $key2 => 11, $key3 => 3, $key4 => 4, $key5 => 5}, |
665 | 685 |
|
666 | 686 |
eval { $dbi->execute("drop table $table1") }; |
667 | 687 |
$dbi->execute($create_table1); |
668 |
-$dbi->timestamp({ |
|
669 |
- update => [$key1 => '5'] |
|
670 |
-}); |
|
688 |
+$dbi->update_timestamp( |
|
689 |
+ $key1 => '5' |
|
690 |
+); |
|
671 | 691 |
$dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2}); |
672 | 692 |
$dbi->update(table => $table1, timestamp => 1, where => {$key2 => 2}); |
673 | 693 |
$result = $dbi->execute("select * from $table1"); |
674 | 694 |
$rows = $result->all; |
675 | 695 |
is_deeply($rows, [{$key1 => 5, $key2 => 2}], "basic"); |
676 | 696 |
|
697 |
+eval { $dbi->execute("drop table $table1") }; |
|
698 |
+$dbi->execute($create_table1); |
|
699 |
+$dbi->update_timestamp( |
|
700 |
+ [$key1, $key2] => sub { '5' } |
|
701 |
+); |
|
702 |
+$dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2}); |
|
703 |
+$dbi->update_all(table => $table1, timestamp => 1); |
|
704 |
+$result = $dbi->execute("select * from $table1"); |
|
705 |
+$rows = $result->all; |
|
706 |
+is_deeply($rows, [{$key1 => 5, $key2 => 5}], "basic"); |
|
707 |
+ |
|
708 |
+eval { $dbi->execute("drop table $table1") }; |
|
709 |
+$dbi->execute($create_table1); |
|
710 |
+$dbi->update_timestamp( |
|
711 |
+ [$key1, $key2] => sub { "" . DBIx::Custom->new } |
|
712 |
+); |
|
713 |
+$dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2}); |
|
714 |
+$dbi->update_all(table => $table1, timestamp => 1); |
|
715 |
+$result = $dbi->execute("select * from $table1"); |
|
716 |
+$rows = $result->all; |
|
717 |
+is($rows->[0]->{$key1}, $rows->[0]->{$key2}); |
|
718 |
+ |
|
677 | 719 |
test 'update_all'; |
678 | 720 |
eval { $dbi->execute("drop table $table1") }; |
679 | 721 |
$dbi->execute($create_table1_2); |