... | ... |
@@ -241,9 +241,9 @@ our %VALID_DELETE_ARGS |
241 | 241 |
sub delete { |
242 | 242 |
my ($self, %args) = @_; |
243 | 243 |
|
244 |
- # Check arguments |
|
244 |
+ # Check argument names |
|
245 | 245 |
foreach my $name (keys %args) { |
246 |
- croak qq{"$name" is invalid argument} |
|
246 |
+ croak qq{Argument "$name" is invalid name} |
|
247 | 247 |
unless $VALID_DELETE_ARGS{$name}; |
248 | 248 |
} |
249 | 249 |
|
... | ... |
@@ -307,9 +307,9 @@ our %VALID_DELETE_AT_ARGS |
307 | 307 |
sub delete_at { |
308 | 308 |
my ($self, %args) = @_; |
309 | 309 |
|
310 |
- # Check arguments |
|
310 |
+ # Check argument names |
|
311 | 311 |
foreach my $name (keys %args) { |
312 |
- croak qq{"$name" is invalid argument} |
|
312 |
+ croak qq{Argument "$name" is invalid name} |
|
313 | 313 |
unless $VALID_DELETE_AT_ARGS{$name}; |
314 | 314 |
} |
315 | 315 |
|
... | ... |
@@ -349,9 +349,9 @@ our %VALID_EXECUTE_ARGS = map { $_ => 1 } qw/param filter table/; |
349 | 349 |
sub execute{ |
350 | 350 |
my ($self, $query, %args) = @_; |
351 | 351 |
|
352 |
- # Check arguments |
|
352 |
+ # Check argument names |
|
353 | 353 |
foreach my $name (keys %args) { |
354 |
- croak qq{"$name" is invalid argument} |
|
354 |
+ croak qq{Argument "$name" is invalid name} |
|
355 | 355 |
unless $VALID_EXECUTE_ARGS{$name}; |
356 | 356 |
} |
357 | 357 |
|
... | ... |
@@ -369,6 +369,13 @@ sub execute{ |
369 | 369 |
$arg_tables = [$arg_tables] |
370 | 370 |
unless ref $arg_tables eq 'ARRAY'; |
371 | 371 |
push @$tables, @$arg_tables; |
372 |
+ |
|
373 |
+ # Organize tables |
|
374 |
+ my %table_set = map {defined $_ ? ($_ => 1) : ()} @$tables; |
|
375 |
+ my $main_table = pop @$tables; |
|
376 |
+ delete $table_set{$main_table} if $main_table; |
|
377 |
+ $tables = [keys %table_set]; |
|
378 |
+ push @$tables, $main_table if $main_table; |
|
372 | 379 |
|
373 | 380 |
foreach my $table (@$tables) { |
374 | 381 |
next unless $table; |
... | ... |
@@ -442,9 +449,9 @@ our %VALID_INSERT_ARGS = map { $_ => 1 } qw/table param append |
442 | 449 |
sub insert { |
443 | 450 |
my ($self, %args) = @_; |
444 | 451 |
|
445 |
- # Check arguments |
|
452 |
+ # Check argument names |
|
446 | 453 |
foreach my $name (keys %args) { |
447 |
- croak qq{"$name" is invalid argument} |
|
454 |
+ croak qq{Argument "$name" is invalid name} |
|
448 | 455 |
unless $VALID_INSERT_ARGS{$name}; |
449 | 456 |
} |
450 | 457 |
|
... | ... |
@@ -497,9 +504,9 @@ our %VALID_INSERT_AT_ARGS |
497 | 504 |
sub insert_at { |
498 | 505 |
my ($self, %args) = @_; |
499 | 506 |
|
500 |
- # Check arguments |
|
507 |
+ # Check argument names |
|
501 | 508 |
foreach my $name (keys %args) { |
502 |
- croak qq{"$name" is invalid argument} |
|
509 |
+ croak qq{Argument "$name" is invalid name} |
|
503 | 510 |
unless $VALID_INSERT_AT_ARGS{$name}; |
504 | 511 |
} |
505 | 512 |
|
... | ... |
@@ -630,9 +637,9 @@ sub _need_tables { |
630 | 637 |
sub select { |
631 | 638 |
my ($self, %args) = @_; |
632 | 639 |
|
633 |
- # Check arguments |
|
640 |
+ # Check argument names |
|
634 | 641 |
foreach my $name (keys %args) { |
635 |
- croak qq{"$name" is invalid argument} |
|
642 |
+ croak qq{Argument "$name" is invalid name} |
|
636 | 643 |
unless $VALID_SELECT_ARGS{$name}; |
637 | 644 |
} |
638 | 645 |
|
... | ... |
@@ -651,23 +658,26 @@ sub select { |
651 | 658 |
croak qq{"join" must be array reference} |
652 | 659 |
unless ref $join eq 'ARRAY'; |
653 | 660 |
|
661 |
+ # Join tables |
|
654 | 662 |
my @join_tables; |
655 | 663 |
unshift @join_tables, $tables->[-1]; |
656 | 664 |
|
657 |
- # Relation table(DEPRECATED!); |
|
658 |
- $self->_add_relation_table($args{relation}, $tables); |
|
665 |
+ # Add relation tables(DEPRECATED!); |
|
666 |
+ $self->_add_relation_table($tables, $args{relation}); |
|
659 | 667 |
|
660 | 668 |
# SQL stack |
661 | 669 |
my @sql; |
662 |
- |
|
663 | 670 |
push @sql, 'select'; |
664 | 671 |
|
672 |
+ # Selection |
|
665 | 673 |
if ($selection) { |
666 | 674 |
push @sql, $selection; |
667 | 675 |
push @join_tables, @{$self->_tables($selection)}; |
668 | 676 |
} |
677 |
+ |
|
678 |
+ # Column names and table name |
|
669 | 679 |
else { |
670 |
- # Column clause |
|
680 |
+ # Column names |
|
671 | 681 |
if (@$columns) { |
672 | 682 |
foreach my $column (@$columns) { |
673 | 683 |
push @join_tables, @{$self->_tables($column)}; |
... | ... |
@@ -691,9 +701,7 @@ sub select { |
691 | 701 |
if (ref $where eq 'HASH') { |
692 | 702 |
my $clause = ['and']; |
693 | 703 |
push @$clause, "{= $_}" for keys %$where; |
694 |
- $w = $self->where; |
|
695 |
- $w->clause($clause); |
|
696 |
- $w->param($where); |
|
704 |
+ $w = $self->where(clause => $clause, param => $where); |
|
697 | 705 |
} |
698 | 706 |
elsif (ref $where eq 'DBIx::Custom::Where') { |
699 | 707 |
$w = $where; |
... | ... |
@@ -706,7 +714,7 @@ sub select { |
706 | 714 |
# String where |
707 | 715 |
my $swhere = "$w"; |
708 | 716 |
|
709 |
- # Table name in Where |
|
717 |
+ # Add table names in where clause to join talbes. |
|
710 | 718 |
unshift @join_tables, @{$self->_tables($swhere)}; |
711 | 719 |
|
712 | 720 |
# Join |
... | ... |
@@ -744,7 +752,7 @@ sub select { |
744 | 752 |
} |
745 | 753 |
} |
746 | 754 |
|
747 |
- # Add where |
|
755 |
+ # Add where clause |
|
748 | 756 |
push @sql, $swhere; |
749 | 757 |
|
750 | 758 |
# Relation(DEPRECATED!); |
... | ... |
@@ -777,9 +785,9 @@ our %VALID_SELECT_AT_ARGS |
777 | 785 |
sub select_at { |
778 | 786 |
my ($self, %args) = @_; |
779 | 787 |
|
780 |
- # Check arguments |
|
788 |
+ # Check argument names |
|
781 | 789 |
foreach my $name (keys %args) { |
782 |
- croak qq{"$name" is invalid argument} |
|
790 |
+ croak qq{Argument "$name" is invalid name} |
|
783 | 791 |
unless $VALID_SELECT_AT_ARGS{$name}; |
784 | 792 |
} |
785 | 793 |
|
... | ... |
@@ -921,9 +929,9 @@ our %VALID_UPDATE_ARGS |
921 | 929 |
sub update { |
922 | 930 |
my ($self, %args) = @_; |
923 | 931 |
|
924 |
- # Check arguments |
|
932 |
+ # Check argument names |
|
925 | 933 |
foreach my $name (keys %args) { |
926 |
- croak qq{"$name" is invalid argument} |
|
934 |
+ croak qq{Argument "$name" is invalid name} |
|
927 | 935 |
unless $VALID_UPDATE_ARGS{$name}; |
928 | 936 |
} |
929 | 937 |
|
... | ... |
@@ -1020,9 +1028,9 @@ our %VALID_UPDATE_AT_ARGS |
1020 | 1028 |
sub update_at { |
1021 | 1029 |
my ($self, %args) = @_; |
1022 | 1030 |
|
1023 |
- # Check arguments |
|
1031 |
+ # Check argument names |
|
1024 | 1032 |
foreach my $name (keys %args) { |
1025 |
- croak qq{"$name" is invalid argument} |
|
1033 |
+ croak qq{Argument "$name" is invalid name} |
|
1026 | 1034 |
unless $VALID_UPDATE_AT_ARGS{$name}; |
1027 | 1035 |
} |
1028 | 1036 |
|
... | ... |
@@ -1078,7 +1086,8 @@ sub where { |
1078 | 1086 |
|
1079 | 1087 |
return DBIx::Custom::Where->new( |
1080 | 1088 |
query_builder => $self->query_builder, |
1081 |
- safety_column_name => $self->safety_column_name |
|
1089 |
+ safety_column_name => $self->safety_column_name, |
|
1090 |
+ @_ |
|
1082 | 1091 |
); |
1083 | 1092 |
} |
1084 | 1093 |
|
... | ... |
@@ -1234,7 +1243,7 @@ sub _push_relation { |
1234 | 1243 |
|
1235 | 1244 |
# DEPRECATED! |
1236 | 1245 |
sub _add_relation_table { |
1237 |
- my ($self, $relation, $tables) = @_; |
|
1246 |
+ my ($self, $tables, $relation) = @_; |
|
1238 | 1247 |
|
1239 | 1248 |
if (keys %{$relation || {}}) { |
1240 | 1249 |
foreach my $rcolumn (keys %$relation) { |
... | ... |
@@ -1887,7 +1896,10 @@ the key and value is delete from C<param>. |
1887 | 1896 |
|
1888 | 1897 |
=head2 C<(experimental) where> |
1889 | 1898 |
|
1890 |
- my $where = $dbi->where; |
|
1899 |
+ my $where = $dbi->where( |
|
1900 |
+ clause => ['and', '{= title}', '{= author}'], |
|
1901 |
+ param => {title => 'Perl', author => 'Ken'} |
|
1902 |
+ ); |
|
1891 | 1903 |
|
1892 | 1904 |
Create a new L<DBIx::Custom::Where> object. |
1893 | 1905 |
|
... | ... |
@@ -236,7 +236,7 @@ $rows = $dbi->select(table => 'table1')->fetch_hash_all; |
236 | 236 |
is_deeply($rows, [{key1 => 1, key2 => 2}], 'insert append'); |
237 | 237 |
|
238 | 238 |
eval{$dbi->insert(table => 'table1', noexist => 1)}; |
239 |
-like($@, qr/noexist/, "invalid argument"); |
|
239 |
+like($@, qr/noexist/, "invalid"); |
|
240 | 240 |
|
241 | 241 |
eval{$dbi->insert(table => 'table', param => {';' => 1})}; |
242 | 242 |
like($@, qr/safety/); |
... | ... |
@@ -285,7 +285,7 @@ is_deeply($rows, [{key1 => 1, key2 => 22, key3 => 3, key4 => 4, key5 => 5}, |
285 | 285 |
$result = $dbi->update(table => 'table1', param => {key2 => 11}, where => {key1 => 1}, append => ' '); |
286 | 286 |
|
287 | 287 |
eval{$dbi->update(table => 'table1', noexist => 1)}; |
288 |
-like($@, qr/noexist/, "invalid argument"); |
|
288 |
+like($@, qr/noexist/, "invalid"); |
|
289 | 289 |
|
290 | 290 |
eval{$dbi->update(table => 'table1')}; |
291 | 291 |
like($@, qr/where/, "not contain where"); |
... | ... |
@@ -359,7 +359,7 @@ $rows = $dbi->select(table => 'table1')->fetch_hash_all; |
359 | 359 |
is_deeply($rows, [{key1 => 3, key2 => 4}], "delete multi key"); |
360 | 360 |
|
361 | 361 |
eval{$dbi->delete(table => 'table1', noexist => 1)}; |
362 |
-like($@, qr/noexist/, "invalid argument"); |
|
362 |
+like($@, qr/noexist/, "invalid"); |
|
363 | 363 |
|
364 | 364 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
365 | 365 |
$dbi->execute($CREATE_TABLE->{0}); |
... | ... |
@@ -437,7 +437,7 @@ $rows = $dbi->select( |
437 | 437 |
is_deeply($rows, [{table1_key1 => 1, table2_key1 => 1, key2 => 2, key3 => 5}], "relation : no exists where"); |
438 | 438 |
|
439 | 439 |
eval{$dbi->select(table => 'table1', noexist => 1)}; |
440 |
-like($@, qr/noexist/, "invalid argument"); |
|
440 |
+like($@, qr/noexist/, "invalid"); |
|
441 | 441 |
|
442 | 442 |
|
443 | 443 |
test 'fetch filter'; |
... | ... |
@@ -514,7 +514,7 @@ $dbi->execute($CREATE_TABLE->{0}); |
514 | 514 |
} |
515 | 515 |
|
516 | 516 |
eval{$dbi->execute('select * from table1', no_exists => 1)}; |
517 |
-like($@, qr/\Q"no_exists" is invalid argument/, "invald SQL"); |
|
517 |
+like($@, qr/invalid/, "invald SQL"); |
|
518 | 518 |
|
519 | 519 |
$query = $dbi->create_query('select * from table1 where {= key1}'); |
520 | 520 |
$dbi->dbh->disconnect; |