- 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);  |