Showing 3 changed files with 46 additions and 6 deletions
+2 -2
Changes
... ...
@@ -1,6 +1,6 @@
1 1
 0.1670
2
-    - removed EXPERIMETNAL select() column hash option. it's a little complex
3
-
2
+    - removed EXPERIMETNAL select() column hash option. it's a little complex.
3
+    - added EXPERIMETAL select() param option.
4 4
 0.1669
5 5
     - renamed update_param to update_param_tag, update_param is DEPRECATED!
6 6
     - renamed insert_param to insert_param_tag, insert_param is DEPRECATED!
+6 -3
lib/DBIx/Custom.pm
... ...
@@ -841,7 +841,7 @@ sub register_filter {
841 841
 sub register_tag { shift->query_builder->register_tag(@_) }
842 842
 
843 843
 our %SELECT_ARGS
844
-  = map { $_ => 1 } @COMMON_ARGS, qw/column where append relation join/;
844
+  = map { $_ => 1 } @COMMON_ARGS, qw/column where append relation join param/;
845 845
 
846 846
 sub select {
847 847
     my ($self, %args) = @_;
... ...
@@ -906,6 +906,9 @@ sub select {
906 906
     
907 907
     # Main table
908 908
     croak "Not found table name" unless $tables->[-1];
909
+
910
+    # Add table names in param
911
+    unshift @$tables, @{$self->_tables(join(' ', keys %$param) || '')};
909 912
     
910 913
     # Where
911 914
     my $w = $self->_where($where);
... ...
@@ -1310,8 +1313,8 @@ sub _push_join {
1310 1313
         
1311 1314
         my $join_clause = $join->[$i];
1312 1315
         my $q_re = quotemeta($q);
1313
-        my $join_re = $q ? qr/\s$q_re?([^\.\s$q_re]+?)$q_re?\..+\s$q_re?([^\.\s$q_re]+?)$q_re?\..+?$/
1314
-                         : qr/\s([^\.\s]+?)\..+\s([^\.\s]+?)\..+?$/;
1316
+        my $join_re = $q ? qr/\s$q_re?([^\.\s$q_re]+?)$q_re?\..+?\s$q_re?([^\.\s$q_re]+?)$q_re?\..+?$/
1317
+                         : qr/\s([^\.\s]+?)\..+?\s([^\.\s]+?)\..+?$/;
1315 1318
         if ($join_clause =~ $join_re) {
1316 1319
             
1317 1320
             my $table1 = $1;
+38 -1
t/dbix-custom-core-sqlite.t
... ...
@@ -2087,4 +2087,41 @@ test 'merge_param';
2087 2087
     my $param3 = {key1 => 1};
2088 2088
     my $param = $dbi->merge_param($param1, $param2, $param3);
2089 2089
     is_deeply($param, {key1 => [1, 1, 1], key2 => [2, 2], key3 => 3});
2090
-}
2090
+}
2091
+
2092
+test 'select() param option';
2093
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
2094
+$dbi->execute($CREATE_TABLE->{0});
2095
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2096
+$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
2097
+$dbi->execute($CREATE_TABLE->{2});
2098
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 4});
2099
+$dbi->insert(table => 'table2', param => {key1 => 2, key3 => 5});
2100
+$DB::single = 1;
2101
+$rows = $dbi->select(
2102
+    table => 'table1',
2103
+    column => 'table1.key1 as table1_key1, key2, key3',
2104
+    where   => {'table1.key2' => 3},
2105
+    join  => ['inner join (select * from table2 where {= table2.key3})' . 
2106
+              ' as table2 on table1.key1 = table2.key1'],
2107
+    param => {'table2.key3' => 5}
2108
+)->fetch_hash_all;
2109
+is_deeply($rows, [{table1_key1 => 2, key2 => 3, key3 => 5}]);
2110
+
2111
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
2112
+$dbi->reserved_word_quote('"');
2113
+$dbi->execute($CREATE_TABLE->{0});
2114
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2115
+$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
2116
+$dbi->execute($CREATE_TABLE->{2});
2117
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 4});
2118
+$dbi->insert(table => 'table2', param => {key1 => 2, key3 => 5});
2119
+$rows = $dbi->select(
2120
+    table => 'table1',
2121
+    column => 'table1.key1 as table1_key1, key2, key3',
2122
+    where   => {'table1.key2' => 3},
2123
+    join  => ['inner join (select * from table2 where {= table2.key3})' . 
2124
+              ' as table2 on "table1"."key1" = "table2"."key1"'],
2125
+    param => {'table2.key3' => 5}
2126
+)->fetch_hash_all;
2127
+is_deeply($rows, [{table1_key1 => 2, key2 => 3, key3 => 5}]);