added EXPERIMENTAL select() wrap option to support...
...Oracle ROWNUM
| ... | ... | @@ -1,3 +1,5 @@ | 
| 1 | +0.1679 | |
| 2 | + - added EXPERIMENTAL select() wrap option to support Oracle ROWNUM | |
| 1 | 3 | 0.1678 | 
| 2 | 4 | - DBIx::Custom::Model filter attribute can receive hash reference | 
| 3 | 5 | - DBIx::Custom::Where clause attribute can receive clause without column name | 
| ... | ... | @@ -1,6 +1,6 @@ | 
| 1 | 1 | package DBIx::Custom; | 
| 2 | 2 |  | 
| 3 | -our $VERSION = '0.1678'; | |
| 3 | +our $VERSION = '0.1679'; | |
| 4 | 4 |  | 
| 5 | 5 | use 5.008001; | 
| 6 | 6 | use strict; | 
| ... | ... | @@ -811,7 +811,8 @@ sub register_filter { | 
| 811 | 811 |  sub register_tag { shift->query_builder->register_tag(@_) } | 
| 812 | 812 |  | 
| 813 | 813 | our %SELECT_ARGS | 
| 814 | -  = map { $_ => 1 } @COMMON_ARGS, qw/column where append relation join param/; | |
| 814 | +  = map { $_ => 1 } @COMMON_ARGS, | |
| 815 | + qw/column where append relation join param wrap/; | |
| 815 | 816 |  | 
| 816 | 817 |  sub select { | 
| 817 | 818 | my ($self, %args) = @_; | 
| ... | ... | @@ -831,6 +832,7 @@ sub select { | 
| 831 | 832 |      my $relation = delete $args{relation}; | 
| 832 | 833 |      my $param = delete $args{param} || {}; | 
| 833 | 834 |      my $query_return = $args{query}; | 
| 835 | +    my $wrap = delete $args{wrap}; | |
| 834 | 836 |  | 
| 835 | 837 | # Check arguments | 
| 836 | 838 |      foreach my $name (keys %args) { | 
| ... | ... | @@ -900,6 +902,14 @@ sub select { | 
| 900 | 902 | # Append | 
| 901 | 903 | push @sql, $append if $append; | 
| 902 | 904 |  | 
| 905 | + # Wrap | |
| 906 | +    if ($wrap) { | |
| 907 | + croak "wrap option must be array refrence (DBIx::Custom::select)" | |
| 908 | + unless ref $wrap eq 'ARRAY'; | |
| 909 | + unshift @sql, $wrap->[0]; | |
| 910 | + push @sql, $wrap->[1]; | |
| 911 | + } | |
| 912 | + | |
| 903 | 913 | # SQL | 
| 904 | 914 |      my $sql = join (' ', @sql); | 
| 905 | 915 |  | 
| ... | ... | @@ -2129,3 +2129,24 @@ $rows = $dbi->select( | 
| 2129 | 2129 | )->fetch_hash_all; | 
| 2130 | 2130 |  is_deeply($rows, [{table1_key1 => 2, key2 => 3, key3 => 5}]); | 
| 2131 | 2131 |  | 
| 2132 | + | |
| 2133 | +test 'select() wrap option'; | |
| 2134 | +$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); | |
| 2135 | +$dbi->execute($CREATE_TABLE->{0}); | |
| 2136 | +$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); | |
| 2137 | +$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3}); | |
| 2138 | +$rows = $dbi->select( | |
| 2139 | + table => 'table1', | |
| 2140 | + column => 'key1', | |
| 2141 | +    wrap => ['select * from (', ') as t where key1 = 1'] | |
| 2142 | +)->fetch_hash_all; | |
| 2143 | +is_deeply($rows, [{key1 => 1}]); | |
| 2144 | + | |
| 2145 | +eval { | |
| 2146 | +$dbi->select( | |
| 2147 | + table => 'table1', | |
| 2148 | + column => 'key1', | |
| 2149 | +    wrap => 'select * from (' | |
| 2150 | +) | |
| 2151 | +}; | |
| 2152 | +like($@, qr/array/); |