... | ... |
@@ -829,7 +829,13 @@ sub select { |
829 | 829 |
my $where_param = delete $args{where_param} || $param || {}; |
830 | 830 |
my $query_return = $args{query}; |
831 | 831 |
my $wrap = delete $args{wrap}; |
832 |
- |
|
832 |
+ my $id = delete $args{id}; |
|
833 |
+ my $primary_key = delete $args{primary_key}; |
|
834 |
+ croak "update method primary_key option " . |
|
835 |
+ "must be specified when id is specified " . _subname |
|
836 |
+ if defined $id && !defined $primary_key; |
|
837 |
+ $primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY'; |
|
838 |
+ |
|
833 | 839 |
# Check arguments |
834 | 840 |
foreach my $name (keys %args) { |
835 | 841 |
croak qq{"$name" is wrong option } . _subname |
... | ... |
@@ -879,6 +885,7 @@ sub select { |
879 | 885 |
|
880 | 886 |
# Where |
881 | 887 |
my $where_clause = ''; |
888 |
+ $where = $self->_create_param_from_id($id, $primary_key) if $id; |
|
882 | 889 |
if (ref $where) { |
883 | 890 |
$where = $self->_where_to_obj($where); |
884 | 891 |
$where_param = keys %$where_param |
... | ... |
@@ -931,34 +938,6 @@ sub select { |
931 | 938 |
return $result; |
932 | 939 |
} |
933 | 940 |
|
934 |
-our %SELECT_AT_ARGS = (%SELECT_ARGS, where => 1, primary_key => 1); |
|
935 |
- |
|
936 |
-sub select_at { |
|
937 |
- my ($self, %args) = @_; |
|
938 |
- |
|
939 |
- # Arguments |
|
940 |
- my $primary_keys = delete $args{primary_key}; |
|
941 |
- $primary_keys = [$primary_keys] unless ref $primary_keys; |
|
942 |
- my $where = delete $args{where}; |
|
943 |
- my $param = delete $args{param}; |
|
944 |
- |
|
945 |
- # Check arguments |
|
946 |
- foreach my $name (keys %args) { |
|
947 |
- croak qq{"$name" is wrong option } . _subname |
|
948 |
- unless $SELECT_AT_ARGS{$name}; |
|
949 |
- } |
|
950 |
- |
|
951 |
- # Table |
|
952 |
- croak qq{"table" option must be specified } . _subname |
|
953 |
- unless $args{table}; |
|
954 |
- my $table = ref $args{table} ? $args{table}->[-1] : $args{table}; |
|
955 |
- |
|
956 |
- # Create where parameter |
|
957 |
- my $where_param = $self->_create_param_from_id($where, $primary_keys); |
|
958 |
- |
|
959 |
- return $self->select(where => $where_param, %args); |
|
960 |
-} |
|
961 |
- |
|
962 | 941 |
sub setup_model { |
963 | 942 |
my $self = shift; |
964 | 943 |
|
... | ... |
@@ -1316,6 +1295,34 @@ sub _where_to_obj { |
1316 | 1295 |
return $obj; |
1317 | 1296 |
} |
1318 | 1297 |
|
1298 |
+# DEPRECATED! |
|
1299 |
+our %SELECT_AT_ARGS = (%SELECT_ARGS, where => 1, primary_key => 1); |
|
1300 |
+sub select_at { |
|
1301 |
+ my ($self, %args) = @_; |
|
1302 |
+ |
|
1303 |
+ # Arguments |
|
1304 |
+ my $primary_keys = delete $args{primary_key}; |
|
1305 |
+ $primary_keys = [$primary_keys] unless ref $primary_keys; |
|
1306 |
+ my $where = delete $args{where}; |
|
1307 |
+ my $param = delete $args{param}; |
|
1308 |
+ |
|
1309 |
+ # Check arguments |
|
1310 |
+ foreach my $name (keys %args) { |
|
1311 |
+ croak qq{"$name" is wrong option } . _subname |
|
1312 |
+ unless $SELECT_AT_ARGS{$name}; |
|
1313 |
+ } |
|
1314 |
+ |
|
1315 |
+ # Table |
|
1316 |
+ croak qq{"table" option must be specified } . _subname |
|
1317 |
+ unless $args{table}; |
|
1318 |
+ my $table = ref $args{table} ? $args{table}->[-1] : $args{table}; |
|
1319 |
+ |
|
1320 |
+ # Create where parameter |
|
1321 |
+ my $where_param = $self->_create_param_from_id($where, $primary_keys); |
|
1322 |
+ |
|
1323 |
+ return $self->select(where => $where_param, %args); |
|
1324 |
+} |
|
1325 |
+ |
|
1319 | 1326 |
# DEPRECATED! |
1320 | 1327 |
our %DELETE_AT_ARGS = (%DELETE_ARGS, where => 1, primary_key => 1); |
1321 | 1328 |
sub delete_at { |
... | ... |
@@ -2466,4 +2466,54 @@ $dbi->insert(table => 'table3', param => {key1 => 1, key2 => 2, key3 => 3}); |
2466 | 2466 |
$dbi->model('table1_3')->delete(id => [1, 2]); |
2467 | 2467 |
is_deeply($dbi->select(table => 'table1')->fetch_hash_all, []); |
2468 | 2468 |
|
2469 |
+ |
|
2470 |
+test 'select and id option'; |
|
2471 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
|
2472 |
+$dbi->execute($CREATE_TABLE->{1}); |
|
2473 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3}); |
|
2474 |
+$result = $dbi->select( |
|
2475 |
+ table => 'table1', |
|
2476 |
+ primary_key => ['key1', 'key2'], |
|
2477 |
+ id => [1, 2] |
|
2478 |
+); |
|
2479 |
+$row = $result->one; |
|
2480 |
+is($row->{key1}, 1); |
|
2481 |
+is($row->{key2}, 2); |
|
2482 |
+is($row->{key3}, 3); |
|
2483 |
+ |
|
2484 |
+$dbi->delete_all(table => 'table1'); |
|
2485 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3}); |
|
2486 |
+$result = $dbi->select( |
|
2487 |
+ table => 'table1', |
|
2488 |
+ primary_key => 'key1', |
|
2489 |
+ id => 1, |
|
2490 |
+); |
|
2491 |
+$row = $result->one; |
|
2492 |
+is($row->{key1}, 1); |
|
2493 |
+is($row->{key2}, 2); |
|
2494 |
+is($row->{key3}, 3); |
|
2495 |
+ |
|
2496 |
+$dbi->delete_all(table => 'table1'); |
|
2497 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3}); |
|
2498 |
+$result = $dbi->select( |
|
2499 |
+ table => 'table1', |
|
2500 |
+ primary_key => ['key1', 'key2'], |
|
2501 |
+ id => [1, 2] |
|
2502 |
+); |
|
2503 |
+$row = $result->one; |
|
2504 |
+is($row->{key1}, 1); |
|
2505 |
+is($row->{key2}, 2); |
|
2506 |
+is($row->{key3}, 3); |
|
2507 |
+ |
|
2508 |
+ |
|
2509 |
+test 'model select_at'; |
|
2510 |
+$dbi = MyDBI6->connect($NEW_ARGS->{0}); |
|
2511 |
+$dbi->execute($CREATE_TABLE->{1}); |
|
2512 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3}); |
|
2513 |
+$result = $dbi->model('table1')->select(id => [1, 2]); |
|
2514 |
+$row = $result->one; |
|
2515 |
+is($row->{key1}, 1); |
|
2516 |
+is($row->{key2}, 2); |
|
2517 |
+is($row->{key3}, 3); |
|
2518 |
+ |
|
2469 | 2519 |
=cut |