| ... | ... |
@@ -1,3 +1,9 @@ |
| 1 |
+0.1653 |
|
| 2 |
+ - added experimental DBIx::Custom::Model insert_at() |
|
| 3 |
+ - added experimental insert_at() |
|
| 4 |
+ - improved error message |
|
| 5 |
+0.1652 |
|
| 6 |
+ - all filter can receive array reference and receiving hash reference is DEPRECATED! |
|
| 1 | 7 |
0.1651 |
| 2 | 8 |
- add experimental DBIx::Custom::Model filter attribute. |
| 3 | 9 |
0.1650 |
| ... | ... |
@@ -1,6 +1,6 @@ |
| 1 | 1 |
package DBIx::Custom; |
| 2 | 2 |
|
| 3 |
-our $VERSION = '0.1651'; |
|
| 3 |
+our $VERSION = '0.1653'; |
|
| 4 | 4 |
|
| 5 | 5 |
use 5.008001; |
| 6 | 6 |
use strict; |
| ... | ... |
@@ -322,17 +322,20 @@ sub delete_at {
|
| 322 | 322 |
if (exists $args{where}) {
|
| 323 | 323 |
my $where_columns = delete $args{where};
|
| 324 | 324 |
$where_columns = [$where_columns] unless ref $where_columns; |
| 325 |
+ |
|
| 326 |
+ croak qq{"where" must be constant value or array reference}
|
|
| 327 |
+ unless !ref $where_columns || ref $where_columns eq 'ARRAY'; |
|
| 325 | 328 |
|
| 326 | 329 |
for(my $i = 0; $i < @$primary_keys; $i ++) {
|
| 327 | 330 |
$where->{$primary_keys->[$i]} = $where_columns->[$i];
|
| 328 | 331 |
} |
| 329 | 332 |
} |
| 330 |
- elsif (exists $args{param}) {
|
|
| 333 |
+ |
|
| 334 |
+ if (exists $args{param}) {
|
|
| 331 | 335 |
my $param = delete $args{param};
|
| 332 | 336 |
|
| 333 | 337 |
for(my $i = 0; $i < @$primary_keys; $i ++) {
|
| 334 |
- $where->{$primary_keys->[$i]}
|
|
| 335 |
- = delete $param->{$primary_keys->[$i]};
|
|
| 338 |
+ delete $param->{$primary_keys->[$i]};
|
|
| 336 | 339 |
} |
| 337 | 340 |
} |
| 338 | 341 |
|
| ... | ... |
@@ -483,6 +486,52 @@ sub insert {
|
| 483 | 486 |
return $ret_val; |
| 484 | 487 |
} |
| 485 | 488 |
|
| 489 |
+our %VALID_INSERT_AT_ARGS |
|
| 490 |
+ = map { $_ => 1 } qw/table param
|
|
| 491 |
+ where append filter query |
|
| 492 |
+ primary_key param/; |
|
| 493 |
+ |
|
| 494 |
+sub insert_at {
|
|
| 495 |
+ my ($self, %args) = @_; |
|
| 496 |
+ |
|
| 497 |
+ # Check arguments |
|
| 498 |
+ foreach my $name (keys %args) {
|
|
| 499 |
+ croak qq{"$name" is invalid argument}
|
|
| 500 |
+ unless $VALID_INSERT_AT_ARGS{$name};
|
|
| 501 |
+ } |
|
| 502 |
+ |
|
| 503 |
+ # Primary key |
|
| 504 |
+ my $primary_keys = delete $args{primary_key};
|
|
| 505 |
+ $primary_keys = [$primary_keys] unless ref $primary_keys; |
|
| 506 |
+ |
|
| 507 |
+ # Where clause |
|
| 508 |
+ my $where = {};
|
|
| 509 |
+ my $param = {};
|
|
| 510 |
+ |
|
| 511 |
+ if (exists $args{where}) {
|
|
| 512 |
+ my $where_columns = delete $args{where};
|
|
| 513 |
+ $where_columns = [$where_columns] unless ref $where_columns; |
|
| 514 |
+ |
|
| 515 |
+ croak qq{"where" must be constant value or array reference}
|
|
| 516 |
+ unless !ref $where_columns || ref $where_columns eq 'ARRAY'; |
|
| 517 |
+ |
|
| 518 |
+ for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 519 |
+ $where->{$primary_keys->[$i]} = $where_columns->[$i];
|
|
| 520 |
+ } |
|
| 521 |
+ } |
|
| 522 |
+ |
|
| 523 |
+ if (exists $args{param}) {
|
|
| 524 |
+ $param = delete $args{param};
|
|
| 525 |
+ for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 526 |
+ delete $param->{$primary_keys->[$i]};
|
|
| 527 |
+ } |
|
| 528 |
+ } |
|
| 529 |
+ |
|
| 530 |
+ $param = {%$param, %$where};
|
|
| 531 |
+ |
|
| 532 |
+ return $self->insert(param => $param, %args); |
|
| 533 |
+} |
|
| 534 |
+ |
|
| 486 | 535 |
sub each_column {
|
| 487 | 536 |
my ($self, $cb) = @_; |
| 488 | 537 |
|
| ... | ... |
@@ -691,17 +740,21 @@ sub select_at {
|
| 691 | 740 |
my $where = {};
|
| 692 | 741 |
if (exists $args{where}) {
|
| 693 | 742 |
my $where_columns = delete $args{where};
|
| 743 |
+ |
|
| 744 |
+ croak qq{"where" must be constant value or array reference}
|
|
| 745 |
+ unless !ref $where_columns || ref $where_columns eq 'ARRAY'; |
|
| 746 |
+ |
|
| 694 | 747 |
$where_columns = [$where_columns] unless ref $where_columns; |
| 695 | 748 |
|
| 696 | 749 |
for(my $i = 0; $i < @$primary_keys; $i ++) {
|
| 697 | 750 |
$where->{$table . '.' . $primary_keys->[$i]} = $where_columns->[$i];
|
| 698 | 751 |
} |
| 699 | 752 |
} |
| 700 |
- elsif (exists $args{param}) {
|
|
| 753 |
+ |
|
| 754 |
+ if (exists $args{param}) {
|
|
| 701 | 755 |
my $param = delete $args{param};
|
| 702 | 756 |
for(my $i = 0; $i < @$primary_keys; $i ++) {
|
| 703 |
- $where->{$primary_keys->[$i]}
|
|
| 704 |
- = delete $param->{$primary_keys->[$i]};
|
|
| 757 |
+ delete $param->{$primary_keys->[$i]};
|
|
| 705 | 758 |
} |
| 706 | 759 |
} |
| 707 | 760 |
|
| ... | ... |
@@ -929,16 +982,19 @@ sub update_at {
|
| 929 | 982 |
if (exists $args{where}) {
|
| 930 | 983 |
my $where_columns = delete $args{where};
|
| 931 | 984 |
$where_columns = [$where_columns] unless ref $where_columns; |
| 985 |
+ |
|
| 986 |
+ croak qq{"where" must be constant value or array reference}
|
|
| 987 |
+ unless !ref $where_columns || ref $where_columns eq 'ARRAY'; |
|
| 932 | 988 |
|
| 933 | 989 |
for(my $i = 0; $i < @$primary_keys; $i ++) {
|
| 934 | 990 |
$where->{$primary_keys->[$i]} = $where_columns->[$i];
|
| 935 | 991 |
} |
| 936 | 992 |
} |
| 937 |
- elsif (exists $args{param}) {
|
|
| 993 |
+ |
|
| 994 |
+ if (exists $args{param}) {
|
|
| 938 | 995 |
$param = delete $args{param};
|
| 939 | 996 |
for(my $i = 0; $i < @$primary_keys; $i ++) {
|
| 940 |
- $where->{$primary_keys->[$i]}
|
|
| 941 |
- = delete $param->{$primary_keys->[$i]};
|
|
| 997 |
+ delete $param->{$primary_keys->[$i]};
|
|
| 942 | 998 |
} |
| 943 | 999 |
} |
| 944 | 1000 |
|
| ... | ... |
@@ -93,6 +93,16 @@ sub insert {
|
| 93 | 93 |
$self->dbi->insert(table => $self->table, @_); |
| 94 | 94 |
} |
| 95 | 95 |
|
| 96 |
+sub insert_at {
|
|
| 97 |
+ my $self = shift; |
|
| 98 |
+ |
|
| 99 |
+ return $self->dbi->insert_at( |
|
| 100 |
+ table => $self->table, |
|
| 101 |
+ primary_key => $self->primary_key, |
|
| 102 |
+ @_ |
|
| 103 |
+ ); |
|
| 104 |
+} |
|
| 105 |
+ |
|
| 96 | 106 |
sub method {
|
| 97 | 107 |
my $self = shift; |
| 98 | 108 |
|
| ... | ... |
@@ -1439,14 +1439,41 @@ $dbi->delete_at( |
| 1439 | 1439 |
); |
| 1440 | 1440 |
is_deeply($dbi->select(table => 'table1')->fetch_hash_all, []); |
| 1441 | 1441 |
|
| 1442 |
+test 'insert_at'; |
|
| 1443 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
|
| 1444 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1445 |
+$dbi->insert_at( |
|
| 1446 |
+ primary_key => ['key1', 'key2'], |
|
| 1447 |
+ table => 'table1', |
|
| 1448 |
+ where => [1, 2], |
|
| 1449 |
+ param => {key3 => 3}
|
|
| 1450 |
+); |
|
| 1451 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
|
| 1452 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
|
| 1453 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key3}, 3);
|
|
| 1454 |
+ |
|
| 1455 |
+$dbi->delete_all(table => 'table1'); |
|
| 1442 | 1456 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
| 1443 |
-$dbi->delete_at( |
|
| 1457 |
+$dbi->insert_at( |
|
| 1458 |
+ primary_key => 'key1', |
|
| 1444 | 1459 |
table => 'table1', |
| 1445 |
- primary_key => ['key1', 'key2'], |
|
| 1446 |
- param => {key1 => 1, key2 => 2},
|
|
| 1460 |
+ where => 1, |
|
| 1461 |
+ param => {key2 => 2, key3 => 3}
|
|
| 1447 | 1462 |
); |
| 1448 |
-is_deeply($dbi->select(table => 'table1')->fetch_hash_all, []); |
|
| 1449 | 1463 |
|
| 1464 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
|
| 1465 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
|
| 1466 |
+is($dbi->select(table => 'table1')->fetch_hash_first->{key3}, 3);
|
|
| 1467 |
+ |
|
| 1468 |
+eval {
|
|
| 1469 |
+ $dbi->insert_at( |
|
| 1470 |
+ table => 'table1', |
|
| 1471 |
+ primary_key => ['key1', 'key2'], |
|
| 1472 |
+ where => {},
|
|
| 1473 |
+ param => {key1 => 1, key2 => 2, key3 => 3},
|
|
| 1474 |
+ ); |
|
| 1475 |
+}; |
|
| 1476 |
+like($@, qr/must be/); |
|
| 1450 | 1477 |
|
| 1451 | 1478 |
test 'update_at'; |
| 1452 | 1479 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| ... | ... |
@@ -1474,18 +1501,6 @@ is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
| 1474 | 1501 |
is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
| 1475 | 1502 |
is($dbi->select(table => 'table1')->fetch_hash_first->{key3}, 4);
|
| 1476 | 1503 |
|
| 1477 |
-$dbi->delete_all(table => 'table1'); |
|
| 1478 |
-$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1479 |
-$dbi->update_at( |
|
| 1480 |
- table => 'table1', |
|
| 1481 |
- primary_key => ['key1', 'key2'], |
|
| 1482 |
- param => {key1 => 1, key2 => 2, key3 => 4},
|
|
| 1483 |
-); |
|
| 1484 |
-is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1);
|
|
| 1485 |
-is($dbi->select(table => 'table1')->fetch_hash_first->{key2}, 2);
|
|
| 1486 |
-is($dbi->select(table => 'table1')->fetch_hash_first->{key3}, 4);
|
|
| 1487 |
- |
|
| 1488 |
- |
|
| 1489 | 1504 |
test 'select_at'; |
| 1490 | 1505 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
|
| 1491 | 1506 |
$dbi->execute($CREATE_TABLE->{1});
|
| ... | ... |
@@ -1524,6 +1539,35 @@ is($row->{key1}, 1);
|
| 1524 | 1539 |
is($row->{key2}, 2);
|
| 1525 | 1540 |
is($row->{key3}, 3);
|
| 1526 | 1541 |
|
| 1542 |
+eval {
|
|
| 1543 |
+ $result = $dbi->select_at( |
|
| 1544 |
+ table => 'table1', |
|
| 1545 |
+ primary_key => ['key1', 'key2'], |
|
| 1546 |
+ where => {},
|
|
| 1547 |
+ param => {key1 => 1, key2 => 2},
|
|
| 1548 |
+ ); |
|
| 1549 |
+}; |
|
| 1550 |
+like($@, qr/must be/); |
|
| 1551 |
+ |
|
| 1552 |
+eval {
|
|
| 1553 |
+ $result = $dbi->update_at( |
|
| 1554 |
+ table => 'table1', |
|
| 1555 |
+ primary_key => ['key1', 'key2'], |
|
| 1556 |
+ where => {},
|
|
| 1557 |
+ param => {key1 => 1, key2 => 2},
|
|
| 1558 |
+ ); |
|
| 1559 |
+}; |
|
| 1560 |
+like($@, qr/must be/); |
|
| 1561 |
+ |
|
| 1562 |
+eval {
|
|
| 1563 |
+ $result = $dbi->delete_at( |
|
| 1564 |
+ table => 'table1', |
|
| 1565 |
+ primary_key => ['key1', 'key2'], |
|
| 1566 |
+ where => {},
|
|
| 1567 |
+ param => {key1 => 1, key2 => 2},
|
|
| 1568 |
+ ); |
|
| 1569 |
+}; |
|
| 1570 |
+like($@, qr/must be/); |
|
| 1527 | 1571 |
|
| 1528 | 1572 |
test 'columns'; |
| 1529 | 1573 |
use MyDBI1; |
| ... | ... |
@@ -1559,8 +1603,20 @@ $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
| 1559 | 1603 |
$dbi->model('table1_3')->delete_at(where => [1, 2]);
|
| 1560 | 1604 |
is_deeply($dbi->select(table => 'table1')->fetch_hash_all, []); |
| 1561 | 1605 |
|
| 1606 |
+test 'model insert_at'; |
|
| 1607 |
+$dbi = MyDBI6->connect($NEW_ARGS->{0});
|
|
| 1608 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1609 |
+$dbi->model('table1')->insert_at(
|
|
| 1610 |
+ where => [1, 2], |
|
| 1611 |
+ param => {key3 => 3}
|
|
| 1612 |
+); |
|
| 1613 |
+$result = $dbi->model('table1')->select;
|
|
| 1614 |
+$row = $result->fetch_hash_first; |
|
| 1615 |
+is($row->{key1}, 1);
|
|
| 1616 |
+is($row->{key2}, 2);
|
|
| 1617 |
+is($row->{key3}, 3);
|
|
| 1562 | 1618 |
|
| 1563 |
-test 'update_at'; |
|
| 1619 |
+test 'model update_at'; |
|
| 1564 | 1620 |
$dbi = MyDBI6->connect($NEW_ARGS->{0});
|
| 1565 | 1621 |
$dbi->execute($CREATE_TABLE->{1});
|
| 1566 | 1622 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
| ... | ... |
@@ -1574,7 +1630,7 @@ is($row->{key1}, 1);
|
| 1574 | 1630 |
is($row->{key2}, 2);
|
| 1575 | 1631 |
is($row->{key3}, 4);
|
| 1576 | 1632 |
|
| 1577 |
-test 'select_at'; |
|
| 1633 |
+test 'model select_at'; |
|
| 1578 | 1634 |
$dbi = MyDBI6->connect($NEW_ARGS->{0});
|
| 1579 | 1635 |
$dbi->execute($CREATE_TABLE->{1});
|
| 1580 | 1636 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|