| ... | ... |
@@ -1,5 +1,5 @@ |
| 1 | 1 |
0.1648 |
| 2 |
- add experimental each_table() method |
|
| 2 |
+ add experimental update_at(), delete_at(), select_at() |
|
| 3 | 3 |
add experimental setup_model() |
| 4 | 4 |
add experimental DBIx::Custom::Model columns attirbute |
| 5 | 5 |
add experimental DBIx::Custom::Model foreign_key() attribute |
| ... | ... |
@@ -291,6 +291,45 @@ sub delete {
|
| 291 | 291 |
|
| 292 | 292 |
sub delete_all { shift->delete(allow_delete_all => 1, @_) }
|
| 293 | 293 |
|
| 294 |
+our %VALID_DELETE_AT_ARGS |
|
| 295 |
+ = map { $_ => 1 } qw/table where append filter query
|
|
| 296 |
+ primary_key param/; |
|
| 297 |
+ |
|
| 298 |
+sub delete_at {
|
|
| 299 |
+ my ($self, %args) = @_; |
|
| 300 |
+ |
|
| 301 |
+ # Check arguments |
|
| 302 |
+ foreach my $name (keys %args) {
|
|
| 303 |
+ croak qq{"$name" is invalid argument}
|
|
| 304 |
+ unless $VALID_DELETE_AT_ARGS{$name};
|
|
| 305 |
+ } |
|
| 306 |
+ |
|
| 307 |
+ # Primary key |
|
| 308 |
+ my $primary_keys = delete $args{primary_key};
|
|
| 309 |
+ $primary_keys = [$primary_keys] unless ref $primary_keys; |
|
| 310 |
+ |
|
| 311 |
+ # Where clause |
|
| 312 |
+ my $where = {};
|
|
| 313 |
+ if (exists $args{where}) {
|
|
| 314 |
+ my $where_columns = delete $args{where};
|
|
| 315 |
+ $where_columns = [$where_columns] unless ref $where_columns; |
|
| 316 |
+ |
|
| 317 |
+ for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 318 |
+ $where->{$primary_keys->[$i]} = $where_columns->[$i];
|
|
| 319 |
+ } |
|
| 320 |
+ } |
|
| 321 |
+ elsif (exists $args{param}) {
|
|
| 322 |
+ my $param = delete $args{param};
|
|
| 323 |
+ |
|
| 324 |
+ for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 325 |
+ $where->{$primary_keys->[$i]}
|
|
| 326 |
+ = delete $param->{$primary_keys->[$i]};
|
|
| 327 |
+ } |
|
| 328 |
+ } |
|
| 329 |
+ |
|
| 330 |
+ return $self->delete(where => $where, %args); |
|
| 331 |
+} |
|
| 332 |
+ |
|
| 294 | 333 |
sub DESTROY { }
|
| 295 | 334 |
|
| 296 | 335 |
our %VALID_EXECUTE_ARGS = map { $_ => 1 } qw/param filter table/;
|
| ... | ... |
@@ -594,6 +633,44 @@ sub select {
|
| 594 | 633 |
return $result; |
| 595 | 634 |
} |
| 596 | 635 |
|
| 636 |
+our %VALID_SELECT_AT_ARGS |
|
| 637 |
+ = map { $_ => 1 } qw/table column where append relation filter query selection
|
|
| 638 |
+ param primary_key/; |
|
| 639 |
+ |
|
| 640 |
+sub select_at {
|
|
| 641 |
+ my ($self, %args) = @_; |
|
| 642 |
+ |
|
| 643 |
+ # Check arguments |
|
| 644 |
+ foreach my $name (keys %args) {
|
|
| 645 |
+ croak qq{"$name" is invalid argument}
|
|
| 646 |
+ unless $VALID_SELECT_AT_ARGS{$name};
|
|
| 647 |
+ } |
|
| 648 |
+ |
|
| 649 |
+ # Primary key |
|
| 650 |
+ my $primary_keys = delete $args{primary_key};
|
|
| 651 |
+ $primary_keys = [$primary_keys] unless ref $primary_keys; |
|
| 652 |
+ |
|
| 653 |
+ # Where clause |
|
| 654 |
+ my $where = {};
|
|
| 655 |
+ if (exists $args{where}) {
|
|
| 656 |
+ my $where_columns = delete $args{where};
|
|
| 657 |
+ $where_columns = [$where_columns] unless ref $where_columns; |
|
| 658 |
+ |
|
| 659 |
+ for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 660 |
+ $where->{$primary_keys->[$i]} = $where_columns->[$i];
|
|
| 661 |
+ } |
|
| 662 |
+ } |
|
| 663 |
+ elsif (exists $args{param}) {
|
|
| 664 |
+ my $param = delete $args{param};
|
|
| 665 |
+ for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 666 |
+ $where->{$primary_keys->[$i]}
|
|
| 667 |
+ = delete $param->{$primary_keys->[$i]};
|
|
| 668 |
+ } |
|
| 669 |
+ } |
|
| 670 |
+ |
|
| 671 |
+ return $self->select(where => $where, %args); |
|
| 672 |
+} |
|
| 673 |
+ |
|
| 597 | 674 |
sub model {
|
| 598 | 675 |
my ($self, $name, $model) = @_; |
| 599 | 676 |
|
| ... | ... |
@@ -778,6 +855,47 @@ sub update {
|
| 778 | 855 |
|
| 779 | 856 |
sub update_all { shift->update(allow_update_all => 1, @_) };
|
| 780 | 857 |
|
| 858 |
+our %VALID_UPDATE_AT_ARGS |
|
| 859 |
+ = map { $_ => 1 } qw/table param
|
|
| 860 |
+ where append filter query |
|
| 861 |
+ primary_key param/; |
|
| 862 |
+ |
|
| 863 |
+sub update_at {
|
|
| 864 |
+ my ($self, %args) = @_; |
|
| 865 |
+ |
|
| 866 |
+ # Check arguments |
|
| 867 |
+ foreach my $name (keys %args) {
|
|
| 868 |
+ croak qq{"$name" is invalid argument}
|
|
| 869 |
+ unless $VALID_UPDATE_AT_ARGS{$name};
|
|
| 870 |
+ } |
|
| 871 |
+ |
|
| 872 |
+ # Primary key |
|
| 873 |
+ my $primary_keys = delete $args{primary_key};
|
|
| 874 |
+ $primary_keys = [$primary_keys] unless ref $primary_keys; |
|
| 875 |
+ |
|
| 876 |
+ # Where clause |
|
| 877 |
+ my $where = {};
|
|
| 878 |
+ my $param = {};
|
|
| 879 |
+ |
|
| 880 |
+ if (exists $args{where}) {
|
|
| 881 |
+ my $where_columns = delete $args{where};
|
|
| 882 |
+ $where_columns = [$where_columns] unless ref $where_columns; |
|
| 883 |
+ |
|
| 884 |
+ for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 885 |
+ $where->{$primary_keys->[$i]} = $where_columns->[$i];
|
|
| 886 |
+ } |
|
| 887 |
+ } |
|
| 888 |
+ elsif (exists $args{param}) {
|
|
| 889 |
+ $param = delete $args{param};
|
|
| 890 |
+ for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 891 |
+ $where->{$primary_keys->[$i]}
|
|
| 892 |
+ = delete $param->{$primary_keys->[$i]};
|
|
| 893 |
+ } |
|
| 894 |
+ } |
|
| 895 |
+ |
|
| 896 |
+ return $self->update(where => $where, param => $param, %args); |
|
| 897 |
+} |
|
| 898 |
+ |
|
| 781 | 899 |
sub where {
|
| 782 | 900 |
my $self = shift; |
| 783 | 901 |
|
| ... | ... |
@@ -1212,6 +1330,27 @@ Arguments is same as C<delete> method, |
| 1212 | 1330 |
except that C<delete_all> don't have C<where> argument. |
| 1213 | 1331 |
Return value of C<delete_all()> is the count of affected rows. |
| 1214 | 1332 |
|
| 1333 |
+=head3 C<delete_at()> |
|
| 1334 |
+ |
|
| 1335 |
+To delete row by using primary key, use C<delete_at()> |
|
| 1336 |
+ |
|
| 1337 |
+ $dbi->delete_at( |
|
| 1338 |
+ table => 'book', |
|
| 1339 |
+ primary_key => ['id'], |
|
| 1340 |
+ where => ['123'] |
|
| 1341 |
+ ); |
|
| 1342 |
+ |
|
| 1343 |
+In this example, row which id column is 123 is deleted. |
|
| 1344 |
+NOTE that you must pass array reference as C<where>. |
|
| 1345 |
+ |
|
| 1346 |
+You can also write arguments like this. |
|
| 1347 |
+ |
|
| 1348 |
+ $dbi->delete_at( |
|
| 1349 |
+ table => 'book', |
|
| 1350 |
+ primary_key => ['id'], |
|
| 1351 |
+ param => {id => '123'}
|
|
| 1352 |
+ ); |
|
| 1353 |
+ |
|
| 1215 | 1354 |
=head2 C<insert> |
| 1216 | 1355 |
|
| 1217 | 1356 |
$dbi->insert(table => $table, |
| ... | ... |
@@ -1401,6 +1540,15 @@ First element is a string. it contains tags, |
| 1401 | 1540 |
such as "{= title} or {like author}".
|
| 1402 | 1541 |
Second element is paramters. |
| 1403 | 1542 |
|
| 1543 |
+=head3 C<select_at()> |
|
| 1544 |
+ |
|
| 1545 |
+To select row by using primary key, use C<select_at()>. |
|
| 1546 |
+ |
|
| 1547 |
+ $dbi->select_at(table => 'book', primary_key => ['id'], where => ['123']); |
|
| 1548 |
+ |
|
| 1549 |
+In this example, row which id colunm is 123 is selected. |
|
| 1550 |
+NOTE that you must pass array reference as C<where>. |
|
| 1551 |
+ |
|
| 1404 | 1552 |
=head2 C<update> |
| 1405 | 1553 |
|
| 1406 | 1554 |
$dbi->update(table => $table, |
| ... | ... |
@@ -1453,6 +1601,22 @@ Arguments is same as C<update> method, |
| 1453 | 1601 |
except that C<update_all> don't have C<where> argument. |
| 1454 | 1602 |
Return value of C<update_all()> is the count of affected rows. |
| 1455 | 1603 |
|
| 1604 |
+=head3 C<update_at()> |
|
| 1605 |
+ |
|
| 1606 |
+To update row by using primary key, use C<update_at()> |
|
| 1607 |
+ |
|
| 1608 |
+ $dbi->update_at( |
|
| 1609 |
+ table => 'book', |
|
| 1610 |
+ primary_key => ['id'], |
|
| 1611 |
+ where => ['123'], |
|
| 1612 |
+ param => {name => 'Ken'}
|
|
| 1613 |
+ ); |
|
| 1614 |
+ |
|
| 1615 |
+In this example, row which id column is 123 is updated. |
|
| 1616 |
+NOTE that you must pass array reference as C<where>. |
|
| 1617 |
+If C<param> contains primary key, |
|
| 1618 |
+the key and value is delete from C<param>. |
|
| 1619 |
+ |
|
| 1456 | 1620 |
=head2 C<(experimental) where> |
| 1457 | 1621 |
|
| 1458 | 1622 |
my $where = $dbi->where; |
| ... | ... |
@@ -380,6 +380,45 @@ You don't have to wirte last semicolon in C<execute()>. |
| 380 | 380 |
|
| 381 | 381 |
$dbi->execute('select * from book');
|
| 382 | 382 |
|
| 383 |
+=head3 Update by using primary key : C<update_at()> |
|
| 384 |
+ |
|
| 385 |
+To update row by using primary key, use C<update_at()> |
|
| 386 |
+ |
|
| 387 |
+ $dbi->update_at( |
|
| 388 |
+ table => 'book', primary_key => ['id'], |
|
| 389 |
+ where => ['123'], param => {name => 'Ken'}
|
|
| 390 |
+ ); |
|
| 391 |
+ |
|
| 392 |
+In this example, row which id column is 123 is updated. |
|
| 393 |
+NOTE that you must pass array reference as C<where>. |
|
| 394 |
+If C<param> contains primary key, the key and value is delete from C<param>. |
|
| 395 |
+ |
|
| 396 |
+=head3 Delete by using primary key : C<delete_at()> |
|
| 397 |
+ |
|
| 398 |
+To delete row by using primary key, use C<delete_at()> |
|
| 399 |
+ |
|
| 400 |
+ $dbi->delete_at(table => 'book', primary_key => ['id'], where => ['123']); |
|
| 401 |
+ |
|
| 402 |
+In this example, row which id column is 123 is deleted. |
|
| 403 |
+NOTE that you must pass array reference as C<where>. |
|
| 404 |
+ |
|
| 405 |
+You can also write arguments like this. |
|
| 406 |
+ |
|
| 407 |
+ $dbi->delete_at(table => 'book', primary_key => ['id'], param => {id => '123'});
|
|
| 408 |
+ |
|
| 409 |
+=head3 Select by using primary key : C<select_at()> |
|
| 410 |
+ |
|
| 411 |
+To select row by using primary key, use C<select_at()>. |
|
| 412 |
+ |
|
| 413 |
+ $dbi->select_at(table => 'book', primary_key => ['id'], where => ['123']); |
|
| 414 |
+ |
|
| 415 |
+In this example, row which id colunm is 123 is selected. |
|
| 416 |
+NOTE that you must pass array reference as C<where>. |
|
| 417 |
+ |
|
| 418 |
+You can also write arguments like this. |
|
| 419 |
+ |
|
| 420 |
+ $dbi->select_at(table => 'book', primary_key => ['id'], param => {id => '123'});
|
|
| 421 |
+ |
|
| 383 | 422 |
=head2 3. Fetch row |
| 384 | 423 |
|
| 385 | 424 |
Return value of C<select()> is L<DBIx::Custom::Result> object. |
| ... | ... |
@@ -1073,11 +1112,15 @@ Model examples |
| 1073 | 1112 |
package MyModel::book; |
| 1074 | 1113 |
use base 'DBIx::Custom::Model'; |
| 1075 | 1114 |
|
| 1115 |
+ __PACKAGE__->attr('primary_key' => sub { ['id'] };
|
|
| 1116 |
+ |
|
| 1076 | 1117 |
sub insert { ... }
|
| 1077 | 1118 |
sub list { ... }
|
| 1078 | 1119 |
|
| 1079 | 1120 |
package MyModel::company; |
| 1080 | 1121 |
use base 'DBIx::Custom::Model'; |
| 1122 |
+ |
|
| 1123 |
+ __PACKAGE__->attr('primary_key' => sub { ['id'] };
|
|
| 1081 | 1124 |
|
| 1082 | 1125 |
sub insert { ... }
|
| 1083 | 1126 |
sub list { ... }
|
| ... | ... |
@@ -386,6 +386,45 @@ SQLを実行するにはC<execute()>を使用します。 |
| 386 | 386 |
|
| 387 | 387 |
$dbi->execute('select * from book');
|
| 388 | 388 |
|
| 389 |
+=head3 プライマリーキーを利用した行の更新 C<update_at()> |
|
| 390 |
+ |
|
| 391 |
+プライマリーを使用して行を更新するにはC<update_at()>を使用します。 |
|
| 392 |
+ |
|
| 393 |
+ $dbi->update_at( |
|
| 394 |
+ table => 'book', primary_key => ['id'], |
|
| 395 |
+ where => ['123'], param => {name => 'Ken'}
|
|
| 396 |
+ ); |
|
| 397 |
+ |
|
| 398 |
+この例ではidの列が123の行が更新されます。C<where>には、配列の |
|
| 399 |
+リファレンスを渡す必要があることに注意してください。 |
|
| 400 |
+なおC<param>にプライマリーキーが含まれていた場合は、そのキーが削除さされます。 |
|
| 401 |
+ |
|
| 402 |
+=head3 プライマリーキーを利用した行の削除 C<delete_at()> |
|
| 403 |
+ |
|
| 404 |
+プライマリーを使用して行を削除するにはC<delete_at()>を使用します。 |
|
| 405 |
+ |
|
| 406 |
+ $dbi->delete_at(table => 'book', primary_key => ['id'], where => ['123']); |
|
| 407 |
+ |
|
| 408 |
+この例ではidの列が123の行が削除されます。C<where>には、配列の |
|
| 409 |
+リファレンスを渡す必要があることに注意してください。 |
|
| 410 |
+ |
|
| 411 |
+また下のような記述方法も許されています。 |
|
| 412 |
+ |
|
| 413 |
+ $dbi->delete_at(table => 'book', primary_key => ['id'], param => {id => '123'});
|
|
| 414 |
+ |
|
| 415 |
+=head3 プライマリーキーを利用した行の選択 C<select_at()> |
|
| 416 |
+ |
|
| 417 |
+プライマリーを使用して行を選択するにはC<select_at()>を使用します。 |
|
| 418 |
+ |
|
| 419 |
+ $dbi->select_at(table => 'book', primary_key => ['id'], where => ['123']); |
|
| 420 |
+ |
|
| 421 |
+この例ではidの列が123の行が選択されます。C<where>には、配列の |
|
| 422 |
+リファレンスを渡す必要があることに注意してください。 |
|
| 423 |
+ |
|
| 424 |
+また下のような記述方法も許されています。 |
|
| 425 |
+ |
|
| 426 |
+ $dbi->select_at(table => 'book', primary_key => ['id'], param => {id => '123'});
|
|
| 427 |
+ |
|
| 389 | 428 |
=head2 3. 行のフェッチ |
| 390 | 429 |
|
| 391 | 430 |
C<select()>メソッドの戻り値はL<DBIx::Custom::Result>オブジェクトです。 |
| ... | ... |
@@ -1101,11 +1140,15 @@ C<select_at()>で利用されます。 |
| 1101 | 1140 |
package MyModel::book; |
| 1102 | 1141 |
use base 'DBIx::Custom::Model'; |
| 1103 | 1142 |
|
| 1143 |
+ __PACKAGE__->attr('primary_key' => sub { ['id'] };
|
|
| 1144 |
+ |
|
| 1104 | 1145 |
sub insert { ... }
|
| 1105 | 1146 |
sub list { ... }
|
| 1106 | 1147 |
|
| 1107 | 1148 |
package MyModel::company; |
| 1108 | 1149 |
use base 'DBIx::Custom::Model'; |
| 1150 |
+ |
|
| 1151 |
+ __PACKAGE__->attr('primary_key' => sub { ['id'] };
|
|
| 1109 | 1152 |
|
| 1110 | 1153 |
sub insert { ... }
|
| 1111 | 1154 |
sub list { ... }
|
| ... | ... |
@@ -1394,3 +1394,109 @@ $dbi->execute('create table test (id, name, primary key (id, name));');
|
| 1394 | 1394 |
$dbi->setup_model; |
| 1395 | 1395 |
is_deeply($dbi->model('book')->columns, ['id']);
|
| 1396 | 1396 |
is_deeply($dbi->model('company')->columns, ['id', 'name']);
|
| 1397 |
+ |
|
| 1398 |
+test 'delete_at'; |
|
| 1399 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
|
| 1400 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1401 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1402 |
+$dbi->delete_at( |
|
| 1403 |
+ table => 'table1', |
|
| 1404 |
+ primary_key => ['key1', 'key2'], |
|
| 1405 |
+ where => [1, 2], |
|
| 1406 |
+); |
|
| 1407 |
+is_deeply($dbi->select(table => 'table1')->fetch_hash_all, []); |
|
| 1408 |
+ |
|
| 1409 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1410 |
+$dbi->delete_at( |
|
| 1411 |
+ table => 'table1', |
|
| 1412 |
+ primary_key => 'key1', |
|
| 1413 |
+ where => 1, |
|
| 1414 |
+); |
|
| 1415 |
+is_deeply($dbi->select(table => 'table1')->fetch_hash_all, []); |
|
| 1416 |
+ |
|
| 1417 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1418 |
+$dbi->delete_at( |
|
| 1419 |
+ table => 'table1', |
|
| 1420 |
+ primary_key => ['key1', 'key2'], |
|
| 1421 |
+ param => {key1 => 1, key2 => 2},
|
|
| 1422 |
+); |
|
| 1423 |
+is_deeply($dbi->select(table => 'table1')->fetch_hash_all, []); |
|
| 1424 |
+ |
|
| 1425 |
+ |
|
| 1426 |
+test 'update_at'; |
|
| 1427 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
|
| 1428 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1429 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1430 |
+$dbi->update_at( |
|
| 1431 |
+ table => 'table1', |
|
| 1432 |
+ primary_key => ['key1', 'key2'], |
|
| 1433 |
+ where => [1, 2], |
|
| 1434 |
+ param => {key3 => 4}
|
|
| 1435 |
+); |
|
| 1436 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
|
| 1437 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
|
| 1438 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key3}, 4);
|
|
| 1439 |
+ |
|
| 1440 |
+$dbi->delete_all(table => 'table1'); |
|
| 1441 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1442 |
+$dbi->update_at( |
|
| 1443 |
+ table => 'table1', |
|
| 1444 |
+ primary_key => 'key1', |
|
| 1445 |
+ where => 1, |
|
| 1446 |
+ param => {key3 => 4}
|
|
| 1447 |
+); |
|
| 1448 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
|
| 1449 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
|
| 1450 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key3}, 4);
|
|
| 1451 |
+ |
|
| 1452 |
+$dbi->delete_all(table => 'table1'); |
|
| 1453 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1454 |
+$dbi->update_at( |
|
| 1455 |
+ table => 'table1', |
|
| 1456 |
+ primary_key => ['key1', 'key2'], |
|
| 1457 |
+ param => {key1 => 1, key2 => 2, key3 => 4},
|
|
| 1458 |
+); |
|
| 1459 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
|
| 1460 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
|
| 1461 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key3}, 4);
|
|
| 1462 |
+ |
|
| 1463 |
+ |
|
| 1464 |
+test 'select_at'; |
|
| 1465 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
|
| 1466 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1467 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1468 |
+$result = $dbi->select_at( |
|
| 1469 |
+ table => 'table1', |
|
| 1470 |
+ primary_key => ['key1', 'key2'], |
|
| 1471 |
+ where => [1, 2] |
|
| 1472 |
+); |
|
| 1473 |
+$row = $result->fetch_hash_first; |
|
| 1474 |
+is($row->{key1}, 1);
|
|
| 1475 |
+is($row->{key2}, 2);
|
|
| 1476 |
+is($row->{key3}, 3);
|
|
| 1477 |
+ |
|
| 1478 |
+$dbi->delete_all(table => 'table1'); |
|
| 1479 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1480 |
+$result = $dbi->select_at( |
|
| 1481 |
+ table => 'table1', |
|
| 1482 |
+ primary_key => 'key1', |
|
| 1483 |
+ where => 1, |
|
| 1484 |
+); |
|
| 1485 |
+$row = $result->fetch_hash_first; |
|
| 1486 |
+is($row->{key1}, 1);
|
|
| 1487 |
+is($row->{key2}, 2);
|
|
| 1488 |
+is($row->{key3}, 3);
|
|
| 1489 |
+ |
|
| 1490 |
+$dbi->delete_all(table => 'table1'); |
|
| 1491 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1492 |
+$result = $dbi->select_at( |
|
| 1493 |
+ table => 'table1', |
|
| 1494 |
+ primary_key => ['key1', 'key2'], |
|
| 1495 |
+ param => {key1 => 1, key2 => 2},
|
|
| 1496 |
+); |
|
| 1497 |
+$row = $result->fetch_hash_first; |
|
| 1498 |
+is($row->{key1}, 1);
|
|
| 1499 |
+is($row->{key2}, 2);
|
|
| 1500 |
+is($row->{key3}, 3);
|
|
| 1501 |
+ |
|
| 1502 |
+ |