... | ... |
@@ -1,4 +1,6 @@ |
1 | 1 |
0.1733 |
2 |
+ - select method join option can receive string. |
|
3 |
+ - removed DEPRECATED status of select param option |
|
2 | 4 |
- select method where_param option is DEPRECATED! |
3 | 5 |
use where => [STRING, PARAM] syntax instead |
4 | 6 |
- delete method where_param option is DEPRECATED! |
... | ... |
@@ -788,16 +788,11 @@ sub select { |
788 | 788 |
my ($self, %opt) = @_; |
789 | 789 |
|
790 | 790 |
# Options |
791 |
- my $table = $opt{table}; |
|
792 |
- my $tables = ref $table eq 'ARRAY' ? $table |
|
793 |
- : defined $table ? [$table] |
|
791 |
+ my $tables = ref $opt{table} eq 'ARRAY' ? $opt{table} |
|
792 |
+ : defined $opt{table} ? [$opt{table}] |
|
794 | 793 |
: []; |
795 | 794 |
$opt{table} = $tables; |
796 |
- my $where = $opt{where} || {}; |
|
797 |
- my $param = $opt{param} || {}; # DEPRECATED! |
|
798 |
- warn "select() param option is DEPRECATED!" |
|
799 |
- if keys %$param; |
|
800 |
- my $where_param = $opt{where_param} || $param || {}; |
|
795 |
+ my $where_param = $opt{where_param} || delete $opt{param} || {}; |
|
801 | 796 |
|
802 | 797 |
# Add relation tables(DEPRECATED!); |
803 | 798 |
if ($opt{relation}) { |
... | ... |
@@ -811,7 +806,7 @@ sub select { |
811 | 806 |
# Prefix |
812 | 807 |
$sql .= "$opt{prefix} " if defined $opt{prefix}; |
813 | 808 |
|
814 |
- # Column clause |
|
809 |
+ # Column |
|
815 | 810 |
if (defined $opt{column}) { |
816 | 811 |
my $columns |
817 | 812 |
= ref $opt{column} eq 'ARRAY' ? $opt{column} : [$opt{column}]; |
... | ... |
@@ -848,7 +843,7 @@ sub select { |
848 | 843 |
$sql .= $self->_q($main_table) . ' '; |
849 | 844 |
} |
850 | 845 |
$sql =~ s/, $/ /; |
851 |
- croak "Not found table name " . _subname |
|
846 |
+ croak "select method table option must be specified " . _subname |
|
852 | 847 |
unless $tables->[-1]; |
853 | 848 |
|
854 | 849 |
# Add tables in parameter |
... | ... |
@@ -856,39 +851,26 @@ sub select { |
856 | 851 |
@{$self->_search_tables(join(' ', keys %$where_param) || '')}; |
857 | 852 |
|
858 | 853 |
# Where |
859 |
- my $where_clause = ''; |
|
860 |
- $where = $self->_id_to_param($opt{id}, $opt{primary_key}, $tables->[-1]) |
|
861 |
- if defined $opt{id}; |
|
862 |
- if (ref $where eq 'ARRAY' && !ref $where->[0]) { |
|
863 |
- $where_clause = "where " . $where->[0]; |
|
864 |
- $where_param = $where->[1]; |
|
865 |
- } |
|
866 |
- elsif (ref $where) { |
|
867 |
- $where = $self->_where_to_obj($where); |
|
868 |
- $where_param = keys %$where_param |
|
869 |
- ? $self->merge_param($where_param, $where->param) |
|
870 |
- : $where->param; |
|
871 |
- |
|
872 |
- # String where |
|
873 |
- $where_clause = $where->to_string; |
|
874 |
- } |
|
875 |
- elsif ($where) { $where_clause = "where $where" } |
|
854 |
+ my $where = defined $opt{id} |
|
855 |
+ ? $self->_id_to_param($opt{id}, $opt{primary_key}, $tables->[-1]) |
|
856 |
+ : $opt{where}; |
|
857 |
+ my $w = $self->_where_clause_and_param($where, $where_param); |
|
876 | 858 |
|
877 | 859 |
# Add table names in where clause |
878 |
- unshift @$tables, @{$self->_search_tables($where_clause)}; |
|
860 |
+ unshift @$tables, @{$self->_search_tables($w->{clause})}; |
|
879 | 861 |
|
880 |
- # Push join |
|
862 |
+ # Join statement |
|
881 | 863 |
$self->_push_join(\$sql, $opt{join}, $tables) if defined $opt{join}; |
882 | 864 |
|
883 | 865 |
# Add where clause |
884 |
- $sql .= "$where_clause "; |
|
866 |
+ $sql .= "$w->{clause} "; |
|
885 | 867 |
|
886 | 868 |
# Relation(DEPRECATED!); |
887 |
- $self->_push_relation(\$sql, $tables, $opt{relation}, $where_clause eq '' ? 1 : 0) |
|
869 |
+ $self->_push_relation(\$sql, $tables, $opt{relation}, $w->{clause} eq '' ? 1 : 0) |
|
888 | 870 |
if $opt{relation}; |
889 | 871 |
|
890 | 872 |
# Execute query |
891 |
- my $result = $self->execute($sql, $where_param, %opt); |
|
873 |
+ my $result = $self->execute($sql, $w->{param}, %opt); |
|
892 | 874 |
|
893 | 875 |
return $result; |
894 | 876 |
} |
... | ... |
@@ -1370,7 +1352,7 @@ sub _option { |
1370 | 1352 |
sub _push_join { |
1371 | 1353 |
my ($self, $sql, $join, $join_tables) = @_; |
1372 | 1354 |
|
1373 |
- $join ||= []; |
|
1355 |
+ $join = [$join] unless ref $join eq 'ARRAY'; |
|
1374 | 1356 |
|
1375 | 1357 |
# No join |
1376 | 1358 |
return unless @$join; |
... | ... |
@@ -1435,9 +1417,7 @@ sub _push_join { |
1435 | 1417 |
keys %$need_tables; |
1436 | 1418 |
|
1437 | 1419 |
# Add join clause |
1438 |
- for my $need_table (@need_tables) { |
|
1439 |
- $$sql .= $tree->{$need_table}{join} . ' '; |
|
1440 |
- } |
|
1420 |
+ $$sql .= $tree->{$_}{join} . ' ' for @need_tables; |
|
1441 | 1421 |
} |
1442 | 1422 |
|
1443 | 1423 |
sub _quote { |
... | ... |
@@ -1700,7 +1680,7 @@ sub apply_filter { |
1700 | 1680 |
sub select_at { |
1701 | 1681 |
my ($self, %opt) = @_; |
1702 | 1682 |
|
1703 |
- warn "select_at is DEPRECATED! use update and id option instead"; |
|
1683 |
+ warn "select_at is DEPRECATED! use select method id option instead"; |
|
1704 | 1684 |
|
1705 | 1685 |
# Options |
1706 | 1686 |
my $primary_keys = delete $opt{primary_key}; |
... | ... |
@@ -1723,7 +1703,7 @@ sub select_at { |
1723 | 1703 |
sub delete_at { |
1724 | 1704 |
my ($self, %opt) = @_; |
1725 | 1705 |
|
1726 |
- warn "delete_at is DEPRECATED! use update and id option instead"; |
|
1706 |
+ warn "delete_at is DEPRECATED! use delete method id option instead"; |
|
1727 | 1707 |
|
1728 | 1708 |
# Options |
1729 | 1709 |
my $primary_keys = delete $opt{primary_key}; |
... | ... |
@@ -1740,7 +1720,7 @@ sub delete_at { |
1740 | 1720 |
sub update_at { |
1741 | 1721 |
my $self = shift; |
1742 | 1722 |
|
1743 |
- warn "update_at is DEPRECATED! use update and id option instead"; |
|
1723 |
+ warn "update_at is DEPRECATED! use update method id option instead"; |
|
1744 | 1724 |
|
1745 | 1725 |
# Options |
1746 | 1726 |
my $param; |
... | ... |
@@ -1762,7 +1742,7 @@ sub update_at { |
1762 | 1742 |
sub insert_at { |
1763 | 1743 |
my $self = shift; |
1764 | 1744 |
|
1765 |
- warn "insert_at is DEPRECATED! use insert and id option instead"; |
|
1745 |
+ warn "insert_at is DEPRECATED! use insert method id option instead"; |
|
1766 | 1746 |
|
1767 | 1747 |
# Options |
1768 | 1748 |
my $param; |
... | ... |
@@ -3422,7 +3402,6 @@ L<DBIx::Custom> |
3422 | 3402 |
insert method param option # will be removed at 2017/1/1 |
3423 | 3403 |
insert method id option # will be removed at 2017/1/1 |
3424 | 3404 |
select method relation option # will be removed at 2017/1/1 |
3425 |
- select method param option # will be removed at 2017/1/1 |
|
3426 | 3405 |
select method column option [COLUMN, as => ALIAS] format |
3427 | 3406 |
# will be removed at 2017/1/1 |
3428 | 3407 |
execute method's sqlfilter option # will be removed at 2017/1/1 |
... | ... |
@@ -2148,6 +2148,16 @@ $rows = $dbi->select( |
2148 | 2148 |
)->all; |
2149 | 2149 |
is_deeply($rows, [{"${table1}_$key1" => 2, $key2 => 3, $key3 => 5}]); |
2150 | 2150 |
|
2151 |
+$rows = $dbi->select( |
|
2152 |
+ table => $table1, |
|
2153 |
+ column => "$table1.$key1 as ${table1}_$key1, $key2, $key3", |
|
2154 |
+ where => {"$table1.$key2" => 3}, |
|
2155 |
+ join => "inner join (select * from $table2 where {= $table2.$key3})" . |
|
2156 |
+ " $table2 on $table1.$key1 = $table2.$key1", |
|
2157 |
+ param => {"$table2.$key3" => 5} |
|
2158 |
+)->all; |
|
2159 |
+is_deeply($rows, [{"${table1}_$key1" => 2, $key2 => 3, $key3 => 5}]); |
|
2160 |
+ |
|
2151 | 2161 |
test 'select() string where'; |
2152 | 2162 |
$dbi = DBIx::Custom->connect; |
2153 | 2163 |
eval { $dbi->execute("drop table $table1") }; |