... | ... |
@@ -1,3 +1,5 @@ |
1 |
+0.1681 |
|
2 |
+ - added EXPERIMENTAL assign_tag() method |
|
1 | 3 |
0.1680 |
2 | 4 |
- DEPRECATED select() param option, this is renamed to where_param |
3 | 5 |
- added select(), update(), and delete() where_param option |
... | ... |
@@ -1,6 +1,6 @@ |
1 | 1 |
package DBIx::Custom; |
2 | 2 |
|
3 |
-our $VERSION = '0.1680'; |
|
3 |
+our $VERSION = '0.1681'; |
|
4 | 4 |
|
5 | 5 |
use 5.008001; |
6 | 6 |
use strict; |
... | ... |
@@ -151,6 +151,26 @@ sub apply_filter { |
151 | 151 |
return $self; |
152 | 152 |
} |
153 | 153 |
|
154 |
+ |
|
155 |
+sub assign_tag { |
|
156 |
+ my ($self, $param) = @_; |
|
157 |
+ |
|
158 |
+ # Create set tag |
|
159 |
+ my @params; |
|
160 |
+ my $safety = $self->safety_character; |
|
161 |
+ my $q = $self->reserved_word_quote; |
|
162 |
+ foreach my $column (keys %$param) { |
|
163 |
+ croak qq{"$column" is not safety column name } . _subname |
|
164 |
+ unless $column =~ /^[$safety\.]+$/; |
|
165 |
+ my $column = "$q$column$q"; |
|
166 |
+ $column =~ s/\./$q.$q/; |
|
167 |
+ push @params, "$column = {? $column}"; |
|
168 |
+ } |
|
169 |
+ my $tag = join(', ', @params); |
|
170 |
+ |
|
171 |
+ return $tag; |
|
172 |
+} |
|
173 |
+ |
|
154 | 174 |
sub column { |
155 | 175 |
my ($self, $table, $columns) = @_; |
156 | 176 |
|
... | ... |
@@ -1084,20 +1104,9 @@ sub update_param_tag { |
1084 | 1104 |
my ($self, $param, $opt) = @_; |
1085 | 1105 |
|
1086 | 1106 |
# Create update parameter tag |
1087 |
- my @params; |
|
1088 |
- my $safety = $self->safety_character; |
|
1089 |
- my $q = $self->reserved_word_quote; |
|
1090 |
- foreach my $column (keys %$param) { |
|
1091 |
- croak qq{"$column" is not safety column name } . _subname |
|
1092 |
- unless $column =~ /^[$safety\.]+$/; |
|
1093 |
- my $column = "$q$column$q"; |
|
1094 |
- $column =~ s/\./$q.$q/; |
|
1095 |
- push @params, "$column = {? $column}"; |
|
1096 |
- } |
|
1097 |
- my $tag; |
|
1098 |
- $tag .= 'set ' unless $opt->{no_set}; |
|
1099 |
- $tag .= join(', ', @params); |
|
1100 |
- |
|
1107 |
+ my $tag = $self->assign_tag($param); |
|
1108 |
+ $tag = "set $tag" unless $opt->{no_set}; |
|
1109 |
+ |
|
1101 | 1110 |
return $tag; |
1102 | 1111 |
} |
1103 | 1112 |
|
... | ... |
@@ -1732,6 +1741,16 @@ You can set multiple filters at once. |
1732 | 1741 |
} |
1733 | 1742 |
); |
1734 | 1743 |
|
1744 |
+=head2 C<assign_tag> EXPERIMENTAL |
|
1745 |
+ |
|
1746 |
+ my $assign_tag = $dbi->assign_tag({title => 'a', age => 2}); |
|
1747 |
+ |
|
1748 |
+Create assign tag. |
|
1749 |
+ |
|
1750 |
+ title = {? title}, author = {? author} |
|
1751 |
+ |
|
1752 |
+This is equal to C<update_param_tag> exept that set is not added. |
|
1753 |
+ |
|
1735 | 1754 |
=head2 C<connect> |
1736 | 1755 |
|
1737 | 1756 |
my $dbi = DBIx::Custom->connect( |
... | ... |
@@ -1792,7 +1792,7 @@ $result = $model->select( |
1792 | 1792 |
is_deeply($result->fetch_hash_first, |
1793 | 1793 |
{key1 => 1, key2 => 2, 'table2__key1' => 1, 'table2__key3' => 3}); |
1794 | 1794 |
|
1795 |
-test 'update_param'; |
|
1795 |
+test 'update_param_tag'; |
|
1796 | 1796 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
1797 | 1797 |
$dbi->execute($CREATE_TABLE->{1}); |
1798 | 1798 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}); |
... | ... |
@@ -1853,6 +1853,27 @@ eval { $dbi->update_param_tag({";" => 1}) }; |
1853 | 1853 |
like($@, qr/not safety/); |
1854 | 1854 |
|
1855 | 1855 |
|
1856 |
+test 'set_tag'; |
|
1857 |
+test 'update_param_tag'; |
|
1858 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
|
1859 |
+$dbi->execute($CREATE_TABLE->{1}); |
|
1860 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}); |
|
1861 |
+$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}); |
|
1862 |
+ |
|
1863 |
+$param = {key2 => 11}; |
|
1864 |
+$update_param = $dbi->assign_tag($param); |
|
1865 |
+$sql = <<"EOS"; |
|
1866 |
+update {table table1} set $update_param |
|
1867 |
+where key1 = 1 |
|
1868 |
+EOS |
|
1869 |
+$dbi->execute($sql, param => $param); |
|
1870 |
+$result = $dbi->execute($SELECT_SOURCES->{0}); |
|
1871 |
+$rows = $result->fetch_hash_all; |
|
1872 |
+is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5}, |
|
1873 |
+ {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}], |
|
1874 |
+ "basic"); |
|
1875 |
+ |
|
1876 |
+ |
|
1856 | 1877 |
test 'insert_param'; |
1857 | 1878 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
1858 | 1879 |
$dbi->execute($CREATE_TABLE->{1}); |