| ... | ... |
@@ -1,4 +1,5 @@ |
| 1 | 1 |
0.1655 |
| 2 |
+ - added experimental update_param and insert_param |
|
| 2 | 3 |
- remove experimental DBIx::Custom::Model relation |
| 3 | 4 |
0.1654 |
| 4 | 5 |
- selection can contain where clause. |
| ... | ... |
@@ -538,14 +538,15 @@ sub insert_at {
|
| 538 | 538 |
sub insert_param {
|
| 539 | 539 |
my ($self, $param) = @_; |
| 540 | 540 |
|
| 541 |
+ # Insert paramter tag |
|
| 541 | 542 |
my @tag; |
| 542 |
- |
|
| 543 | 543 |
push @tag, '{insert_param';
|
| 544 |
- |
|
| 544 |
+ my $safety = $self->safety_column_name; |
|
| 545 | 545 |
foreach my $column (keys %$param) {
|
| 546 |
+ croak qq{"$column" is not safety column name}
|
|
| 547 |
+ unless $column =~ /$safety/; |
|
| 546 | 548 |
push @tag, $column; |
| 547 | 549 |
} |
| 548 |
- |
|
| 549 | 550 |
push @tag, '}'; |
| 550 | 551 |
|
| 551 | 552 |
return join ' ', @tag; |
| ... | ... |
@@ -1057,14 +1058,15 @@ sub update_at {
|
| 1057 | 1058 |
sub update_param {
|
| 1058 | 1059 |
my ($self, $param) = @_; |
| 1059 | 1060 |
|
| 1061 |
+ # Update parameter tag |
|
| 1060 | 1062 |
my @tag; |
| 1061 |
- |
|
| 1062 | 1063 |
push @tag, '{update_param';
|
| 1063 |
- |
|
| 1064 |
+ my $safety = $self->safety_column_name; |
|
| 1064 | 1065 |
foreach my $column (keys %$param) {
|
| 1066 |
+ croak qq{"$column" is not safety column name}
|
|
| 1067 |
+ unless $column =~ /$safety/; |
|
| 1065 | 1068 |
push @tag, $column; |
| 1066 | 1069 |
} |
| 1067 |
- |
|
| 1068 | 1070 |
push @tag, '}'; |
| 1069 | 1071 |
|
| 1070 | 1072 |
return join ' ', @tag; |
| ... | ... |
@@ -1575,6 +1577,14 @@ NOTE that you must pass array reference as C<where>. |
| 1575 | 1577 |
If C<param> contains primary key, |
| 1576 | 1578 |
the key and value is delete from C<param>. |
| 1577 | 1579 |
|
| 1580 |
+=head2 C<(experimental) insert_param> |
|
| 1581 |
+ |
|
| 1582 |
+ my $insert_param = $dbi->insert_param({title => 'a', age => 2});
|
|
| 1583 |
+ |
|
| 1584 |
+Create insert parameter tag. |
|
| 1585 |
+ |
|
| 1586 |
+ {title => 'a', age => 2} -> {insert_param title age}
|
|
| 1587 |
+ |
|
| 1578 | 1588 |
=head2 C<(experimental) each_column> |
| 1579 | 1589 |
|
| 1580 | 1590 |
$dbi->each_column( |
| ... | ... |
@@ -1778,6 +1788,14 @@ default to 0. This is experimental. |
| 1778 | 1788 |
This is overwrites C<default_bind_filter>. |
| 1779 | 1789 |
Return value of C<update()> is the count of affected rows. |
| 1780 | 1790 |
|
| 1791 |
+=head2 C<(experimental) update_param> |
|
| 1792 |
+ |
|
| 1793 |
+ my $update_param = $dbi->update_param({title => 'a', age => 2});
|
|
| 1794 |
+ |
|
| 1795 |
+Create update parameter tag. |
|
| 1796 |
+ |
|
| 1797 |
+ {title => 'a', age => 2} -> {update_param title age}
|
|
| 1798 |
+ |
|
| 1781 | 1799 |
=head2 C<(experimental) model> |
| 1782 | 1800 |
|
| 1783 | 1801 |
$dbi->model('book')->method(
|
| ... | ... |
@@ -50,6 +50,7 @@ my @sources; |
| 50 | 50 |
my $select_SOURCE; |
| 51 | 51 |
my $insert_SOURCE; |
| 52 | 52 |
my $update_SOURCE; |
| 53 |
+my $param; |
|
| 53 | 54 |
my $params; |
| 54 | 55 |
my $sql; |
| 55 | 56 |
my $result; |
| ... | ... |
@@ -65,6 +66,8 @@ my $ret_val; |
| 65 | 66 |
my $infos; |
| 66 | 67 |
my $model; |
| 67 | 68 |
my $where; |
| 69 |
+my $update_param; |
|
| 70 |
+my $insert_param; |
|
| 68 | 71 |
|
| 69 | 72 |
# Prepare table |
| 70 | 73 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| ... | ... |
@@ -1681,4 +1684,41 @@ is_deeply($result->fetch_hash_first, {key2 => 2});
|
| 1681 | 1684 |
$result = $model->select(relation => {'table1.key1' => 'table2.key1'}, column => $model->column_clause(add => ['key3']), where => {'table1.key1' => 1});
|
| 1682 | 1685 |
is_deeply($result->fetch_hash_first, {key1 => 1, key2 => 2, key3 => 3});
|
| 1683 | 1686 |
|
| 1687 |
+test 'update_param'; |
|
| 1688 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
|
| 1689 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1690 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
|
| 1691 |
+$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
|
| 1692 |
+ |
|
| 1693 |
+$param = {key2 => 11};
|
|
| 1694 |
+$update_param = $dbi->update_param($param); |
|
| 1695 |
+$sql = <<"EOS"; |
|
| 1696 |
+update {table table1} $update_param
|
|
| 1697 |
+where key1 = 1 |
|
| 1698 |
+EOS |
|
| 1699 |
+$dbi->execute($sql, param => $param); |
|
| 1700 |
+$result = $dbi->execute($SELECT_SOURCES->{0});
|
|
| 1701 |
+$rows = $result->fetch_hash_all; |
|
| 1702 |
+is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
|
|
| 1703 |
+ {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}],
|
|
| 1704 |
+ "basic"); |
|
| 1705 |
+ |
|
| 1706 |
+ |
|
| 1707 |
+eval { $dbi->update_param({";" => 1}) };
|
|
| 1708 |
+like($@, qr/not safety/); |
|
| 1709 |
+ |
|
| 1710 |
+ |
|
| 1711 |
+test 'insert_param'; |
|
| 1712 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
|
| 1713 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1714 |
+$param = {key1 => 1};
|
|
| 1715 |
+$insert_param = $dbi->insert_param($param); |
|
| 1716 |
+$sql = <<"EOS"; |
|
| 1717 |
+insert into {table table1} $insert_param
|
|
| 1718 |
+EOS |
|
| 1719 |
+ |
|
| 1720 |
+$dbi->execute($sql, param => $param); |
|
| 1721 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
|
| 1684 | 1722 |
|
| 1723 |
+eval { $dbi->insert_param({";" => 1}) };
|
|
| 1724 |
+like($@, qr/not safety/); |