Showing 10 changed files with 120 additions and 265 deletions
+2
Changes 1000644 → 1000755
... ...
@@ -1,3 +1,5 @@
1
+0.1201
2
+  Changed many(not backword compatible)
1 3
 0.1101
2 4
   rename DBIx::Custom::SQLite last_insert_id to last_insert_rowid
3 5
 0.1001
+36 -44
lib/DBIx/Custom.pm
... ...
@@ -4,12 +4,13 @@ use strict;
4 4
 use warnings;
5 5
 
6 6
 use base 'Object::Simple';
7
+
7 8
 use Carp 'croak';
8 9
 use DBI;
9 10
 use DBIx::Custom::Result;
10 11
 use DBIx::Custom::SQL::Template;
11
-use DBIx::Custom::Transaction;
12 12
 use DBIx::Custom::Query;
13
+use DBIx::Custom::KeyInfo;
13 14
 
14 15
 __PACKAGE__->attr('dbh');
15 16
 
... ...
@@ -23,9 +24,6 @@ __PACKAGE__->dual_attr([qw/user password data_source/], inherit => 'scalar_copy'
23 24
 __PACKAGE__->dual_attr([qw/database host port/],        inherit => 'scalar_copy');
24 25
 __PACKAGE__->dual_attr([qw/bind_filter fetch_filter/],  inherit => 'scalar_copy');
25 26
 
26
-__PACKAGE__->dual_attr([qw/no_bind_filters no_fetch_filters/],
27
-                       default => sub { [] }, inherit => 'array_copy');
28
-
29 27
 __PACKAGE__->dual_attr([qw/options filters formats/],
30 28
                        default => sub { {} }, inherit => 'hash_copy');
31 29
 
... ...
@@ -217,15 +215,9 @@ sub create_query {
217 215
     # Set bind filter
218 216
     $query->bind_filter($self->bind_filter);
219 217
     
220
-    # Set no filter keys when binding
221
-    $query->no_bind_filters($self->no_bind_filters);
222
-    
223 218
     # Set fetch filter
224 219
     $query->fetch_filter($self->fetch_filter);
225 220
     
226
-    # Set no filter keys when fetching
227
-    $query->no_fetch_filters($self->no_fetch_filters);
228
-    
229 221
     return $query;
230 222
 }
231 223
 
... ...
@@ -278,7 +270,6 @@ sub query{
278 270
             _dbi             => $self,
279 271
             sth              => $sth,
280 272
             fetch_filter     => $query->fetch_filter,
281
-            no_fetch_filters => $query->no_fetch_filters
282 273
         });
283 274
         return $result;
284 275
     }
... ...
@@ -301,9 +292,9 @@ sub _build_bind_values {
301 292
         my $pos          = $key_info->pos;
302 293
         
303 294
         # Value
304
-        my $value = $id && $pos ? $params->{$id}->{$column}->[$pos]
305
-                  : $id         ? $params->{$id}->{$column}
306
-                  : $pos        ? $params->{$column}->[$pos]
295
+        my $value = $id && defined $pos ? $params->{$id}->{$column}->[$pos]
296
+                  : $id                 ? $params->{$id}->{$column}
297
+                  : defined $pos        ? $params->{$column}->[$pos]
307 298
                   : $params->{$column};
308 299
         
309 300
         # Filter
... ...
@@ -320,18 +311,15 @@ sub transaction { DBIx::Custom::Transaction->new(dbi => shift) }
320 311
 sub run_transaction {
321 312
     my ($self, $transaction) = @_;
322 313
     
323
-    # DBIx::Custom object
324
-    my $dbi = $self->dbi;
325
-    
326 314
     # Shorcut
327
-    return unless $dbi;
315
+    return unless $self;
328 316
     
329 317
     # Check auto commit
330 318
     croak("AutoCommit must be true before transaction start")
331
-      unless $dbi->_auto_commit;
319
+      unless $self->_auto_commit;
332 320
     
333 321
     # Auto commit off
334
-    $dbi->_auto_commit(0);
322
+    $self->_auto_commit(0);
335 323
     
336 324
     # Run transaction
337 325
     eval {$transaction->()};
... ...
@@ -342,13 +330,13 @@ sub run_transaction {
342 330
     # Tranzaction is failed.
343 331
     if ($transaction_error) {
344 332
         # Rollback
345
-        eval{$dbi->dbh->rollback};
333
+        eval{$self->dbh->rollback};
346 334
         
347 335
         # Rollback error
348 336
         my $rollback_error = $@;
349 337
         
350 338
         # Auto commit on
351
-        $dbi->_auto_commit(1);
339
+        $self->_auto_commit(1);
352 340
         
353 341
         if ($rollback_error) {
354 342
             # Rollback is failed
... ...
@@ -362,11 +350,11 @@ sub run_transaction {
362 350
     # Tranzaction is success
363 351
     else {
364 352
         # Commit
365
-        eval{$dbi->dbh->commit};
353
+        eval{$self->dbh->commit};
366 354
         my $commit_error = $@;
367 355
         
368 356
         # Auto commit on
369
-        $dbi->_auto_commit(1);
357
+        $self->_auto_commit(1);
370 358
         
371 359
         # Commit is failed
372 360
         croak($commit_error) if $commit_error;
... ...
@@ -466,7 +454,13 @@ sub update {
466 454
     if (@where_keys) {
467 455
         $where_clause = 'where ';
468 456
         foreach my $where_key (@where_keys) {
469
-            $where_clause .= "{= $where_key} and ";
457
+            my $key_info = DBIx::Custom::KeyInfo->new($where_key);
458
+            
459
+            my $table_new = $key_info->table || $table;
460
+            my $column = $table_new . '.' . $key_info->column
461
+                         . '#@where';
462
+
463
+            $where_clause .= "{= $column} and ";
470 464
         }
471 465
         $where_clause =~ s/ and $//;
472 466
     }
... ...
@@ -486,7 +480,7 @@ sub update {
486 480
     $query_edit_cb->($query) if $query_edit_cb;
487 481
     
488 482
     # Rearrange parammeters
489
-    my $params = {%$update_params, %$where_params};
483
+    my $params = {%$update_params, '@where' => $where_params};
490 484
     
491 485
     # Execute query
492 486
     my $ret_val = $self->query($query, $params);
... ...
@@ -618,11 +612,23 @@ sub select {
618 612
     # Where clause keys
619 613
     my @where_keys = keys %$where_params;
620 614
     
615
+    my $where_params_new = {};
616
+    
621 617
     # Join where clause
622 618
     if (@where_keys) {
623 619
         $template .= 'where ';
624 620
         foreach my $where_key (@where_keys) {
625
-            $template .= "{= $where_key} and ";
621
+            my $key_info = DBIx::Custom::KeyInfo->new($where_key);
622
+            
623
+            my $table_new = $key_info->table || $tables->[0];
624
+            my $column = $table_new . '.' . $key_info->column
625
+                         . '#' . $table_new;
626
+                      
627
+            $template .= "{= $column} and ";
628
+            
629
+            $where_params_new->{$table_new} ||= {};
630
+            $where_params_new->{$table_new}->{$key_info->column}
631
+              = $where_params->{$where_key};
626 632
         }
627 633
     }
628 634
     $template =~ s/ and $//;
... ...
@@ -647,7 +653,7 @@ sub select {
647 653
     $query_edit_cb->($query) if $query_edit_cb;
648 654
     
649 655
     # Execute query
650
-    my $result = $self->query($query, $where_params);
656
+    my $result = $self->query($query, $where_params_new);
651 657
     
652 658
     return $result;
653 659
 }
... ...
@@ -692,11 +698,11 @@ DBIx::Custom - Customizable DBI
692 698
 
693 699
 =head1 VERSION
694 700
 
695
-Version 0.1101
701
+Version 0.1201
696 702
 
697 703
 =cut
698 704
 
699
-our $VERSION = '0.1101';
705
+our $VERSION = '0.1201';
700 706
 
701 707
 =head1 STATE
702 708
 
... ...
@@ -869,20 +875,6 @@ Bind filter arguemts is
869 875
     3. $dbi   : DBIx::Custom object
870 876
     4. $infos : {type => $table, sth => $sth, index => $index}
871 877
 
872
-=head2 no_bind_filters
873
-
874
-Key list which dose not have to bind filtering
875
-    
876
-    $dbi             = $dbi->no_bind_filters(qw/title author/);
877
-    $no_bind_filters = $dbi->no_bind_filters;
878
-
879
-=head2 no_fetch_filters
880
-
881
-Key list which dose not have to fetch filtering
882
-
883
-    $dbi              = $dbi->no_fetch_filters(qw/title author/);
884
-    $no_fetch_filters = $dbi->no_fetch_filters;
885
-
886 878
 =head2 result_class
887 879
 
888 880
 Resultset class
+1 -1
lib/DBIx/Custom/KeyInfo.pm
... ...
@@ -23,7 +23,7 @@ sub parse {
23 23
     my ($self, $key) = @_;
24 24
     
25 25
     # Parse
26
-    ($key || '') =~ /^(?:(.+?)\.)?(.+?)(?:@(.+))?$/;
26
+    ($key || '') =~ /^(?:(.+?)\.)?(.+?)(?:#(.+))?$/;
27 27
     $self->table($1 || '');
28 28
     $self->column($2 || '');
29 29
     $self->id($3 || '');
+1 -47
lib/DBIx/Custom/Query.pm 1000644 → 1000755
... ...
@@ -6,35 +6,6 @@ use warnings;
6 6
 use base 'Object::Simple';
7 7
 
8 8
 __PACKAGE__->attr([qw/sql key_infos bind_filter fetch_filter sth/]);
9
-__PACKAGE__->attr(_no_bind_filters => sub { {} });
10
-__PACKAGE__->attr(no_fetch_filters => sub { [] });
11
-
12
-sub new {
13
-    my $self = shift->SUPER::new(@_);
14
-    
15
-    # Initialize attributes
16
-    $self->no_bind_filters($self->{no_bind_filters})
17
-      if $self->{no_bind_filters};
18
-    
19
-    return $self;
20
-}
21
-
22
-sub no_bind_filters {
23
-    my $self = shift;
24
-    
25
-    if (@_) {
26
-        # Set
27
-        $self->{no_bind_filters} = $_[0];
28
-        
29
-        # Cached
30
-        my %no_bind_filters = map { $_ => 1 } @{$self->{no_bind_filters}};
31
-        $self->_no_bind_filters(\%no_bind_filters);
32
-        
33
-        return $self;
34
-    }
35
-    
36
-    return $self->{no_bind_filters};
37
-}
38 9
 
39 10
 1;
40 11
 
... ...
@@ -50,12 +21,9 @@ DBIx::Custom::Query - DBIx::Custom query
50 21
     # Create by using create_query
51 22
     my $query = DBIx::Custom->create_query($template);
52 23
     
53
-    # Set attributes
24
+    # Attributes
54 25
     $query->bind_filter($dbi->filters->{default_bind_filter});
55
-    $query->no_bind_filters('title', 'author');
56
-    
57 26
     $query->fetch_filter($dbi->filters->{default_fetch_filter});
58
-    $query->no_fetch_filters('title', 'author');
59 27
 
60 28
 =head1 ATTRIBUTES
61 29
 
... ...
@@ -80,13 +48,6 @@ Filter excuted when value is bind
80 48
     $query       = $query->bind_filter($bind_filter);
81 49
     $bind_filter = $query->bind_filter;
82 50
 
83
-=head2 no_bind_filters
84
-
85
-Key list which dose not have to bind filtering
86
-
87
-    $query           = $query->no_bind_filters($no_filters);
88
-    $no_bind_filters = $query->no_bind_filters;
89
-
90 51
 =head2 fetch_filter
91 52
 
92 53
 Filter excuted when data is fetched
... ...
@@ -94,13 +55,6 @@ Filter excuted when data is fetched
94 55
     $query        = $query->fetch_filter($fetch_filter);
95 56
     $fetch_filter = $query->fetch_filter;
96 57
 
97
-=head2 no_fetch_filters
98
-
99
-Key list which dose not have to fetch filtering
100
-
101
-    $query            = $query->no_fetch_filters($no_filters);
102
-    $no_fetch_filters = $query->no_fetch_filters;
103
-
104 58
 =head2 key_infos
105 59
 
106 60
 Key informations
+3 -45
lib/DBIx/Custom/Result.pm
... ...
@@ -8,35 +8,6 @@ use base 'Object::Simple';
8 8
 use Carp 'croak';
9 9
 
10 10
 __PACKAGE__->attr([qw/_dbi sth fetch_filter/]);
11
-__PACKAGE__->attr(_no_fetch_filters => sub { {} });
12
-
13
-sub new {
14
-    my $self = shift->SUPER::new(@_);
15
-    
16
-    # Initialize attributes
17
-    $self->no_fetch_filters($self->{no_fetch_filters})
18
-      if exists $self->{no_fetch_filters};
19
-    
20
-    return $self;
21
-}
22
-
23
-sub no_fetch_filters {
24
-    my $self = shift;
25
-    
26
-    if (@_) {
27
-        
28
-        # Set
29
-        $self->{no_fetch_filters} = $_[0];
30
-        
31
-        # Cached
32
-        my %no_fetch_filters = map {$_ => 1} @{$self->{no_fetch_filters}};
33
-        $self->_no_fetch_filters(\%no_fetch_filters);
34
-        
35
-        return $self;
36
-    }
37
-    
38
-    return $self->{no_fetch_filters};
39
-}
40 11
 
41 12
 sub fetch {
42 13
     my ($self, $type) = @_;
... ...
@@ -54,7 +25,6 @@ sub fetch {
54 25
         my $keys  = $sth->{NAME_lc};
55 26
         my $types = $sth->{TYPE};
56 27
         for (my $i = 0; $i < @$keys; $i++) {
57
-            next if $self->_no_fetch_filters->{$keys->[$i]};
58 28
             $row->[$i]= $fetch_filter->($row->[$i], $keys->[$i], $self->_dbi,
59 29
                                         {type => $types->[$i], sth => $sth, index => $i});
60 30
         }
... ...
@@ -81,14 +51,9 @@ sub fetch_hash {
81 51
     if ($fetch_filter) {
82 52
         my $types = $sth->{TYPE};
83 53
         for (my $i = 0; $i < @$keys; $i++) {
84
-            if ($self->_no_fetch_filters->{$keys->[$i]}) {
85
-                $row_hash->{$keys->[$i]} = $row->[$i];
86
-            }
87
-            else {
88
-                $row_hash->{$keys->[$i]}
89
-                  = $fetch_filter->($row->[$i], $keys->[$i], $self->_dbi,
90
-                                    {type => $types->[$i], sth => $sth, index => $i});
91
-            }
54
+            $row_hash->{$keys->[$i]}
55
+              = $fetch_filter->($row->[$i], $keys->[$i], $self->_dbi,
56
+                                {type => $types->[$i], sth => $sth, index => $i});
92 57
         }
93 58
     }
94 59
     
... ...
@@ -242,13 +207,6 @@ Filter excuted when data is fetched
242 207
     $result         = $result->fetch_filter($sth);
243 208
     $fetch_filter   = $result->fech_filter;
244 209
 
245
-=head2 no_fetch_filters
246
-
247
-Key list which dose not have to fetch filtering
248
-
249
-    $result           = $result->no_fetch_filters($no_fetch_filters);
250
-    $no_fetch_filters = $result->no_fetch_filters;
251
-
252 210
 =head1 METHODS
253 211
 
254 212
 This class is L<Object::Simple> subclass.
+15 -6
lib/DBIx/Custom/SQL/Template.pm
... ...
@@ -237,14 +237,18 @@ sub expand_basic_tag {
237 237
     croak("You must be pass key as argument to tag '{$tag_name }'")
238 238
       unless $key;
239 239
     
240
+    # Key info
241
+    my $key_info = DBIx::Custom::KeyInfo->new($key);
242
+    $key_info->table($table) unless $key_info->table;
243
+
240 244
     # Expanded tag
245
+    my $column = $key_info->table
246
+               ? $key_info->table . '.' . $key_info->column
247
+               : $key_info->column;
241 248
     my $expand = $tag_name eq '?'
242 249
                ? '?'
243
-               : "$key $tag_name ?";
244
-    
245
-    my $key_info = DBIx::Custom::KeyInfo->new($key);
246
-    $key_info->table($table) unless $key_info->table;
247
-    
250
+               : "$column $tag_name ?";
251
+
248 252
     return ($expand, [$key_info]);
249 253
 }
250 254
 
... ...
@@ -263,7 +267,12 @@ sub expand_in_tag {
263 267
       if !$placeholder_count || $placeholder_count =~ /\D/;
264 268
 
265 269
     # Expand tag
266
-    my $expand = "$key $tag_name (";
270
+    my $key_info = DBIx::Custom::KeyInfo->new($key);
271
+    my $column = $key_info->table
272
+               ? $key_info->table . '.' . $key_info->column
273
+               : $key_info->column;
274
+
275
+    my $expand = "$column $tag_name (";
267 276
     for (my $i = 0; $i < $placeholder_count; $i++) {
268 277
         $expand .= '?, ';
269 278
     }
+62 -97
t/dbix-custom-core-sqlite.t
... ...
@@ -25,7 +25,7 @@ my $CREATE_TABLE = {
25 25
     2 => 'create table table2 (key1 char(255), key3 char(255));'
26 26
 };
27 27
 
28
-my $SELECT_TMPL = {
28
+my $SELECT_TMPLS = {
29 29
     0 => 'select * from table1;'
30 30
 };
31 31
 
... ...
@@ -180,19 +180,17 @@ $insert_tmpl = "insert into table1 {insert key1 key2}";
180 180
 $dbi->query($insert_tmpl, {key1 => 1, key2 => 2}, sub {
181 181
     my $query = shift;
182 182
     $query->bind_filter(sub {
183
-        my ($value, $table, $column) = @_;
184
-        if ($column eq 'key2') {
183
+        my ($value, $table, $column, $dbi) = @_;
184
+        if ($column eq 'key2' && $dbi->isa('DBIx::Custom')) {
185 185
             return $value + 1;
186 186
         }
187 187
         return $value;
188 188
     });
189 189
 });
190
-$result = $dbi->query(['table1', $SELECT_TMPL->{0}]);
190
+$result = $dbi->query(['table1', $SELECT_TMPLS->{0}]);
191 191
 $rows = $result->fetch_hash_all;
192 192
 is_deeply($rows, [{key1 => 1, key2 => 3}], $test);
193 193
 
194
-__END__
195
-
196 194
 test 'Filter basic';
197 195
 $dbi->do($DROP_TABLE->{0});
198 196
 $dbi->do($CREATE_TABLE->{0});
... ...
@@ -200,7 +198,7 @@ $dbi->do($CREATE_TABLE->{0});
200 198
 $insert_tmpl  = "insert into table1 {insert key1 key2};";
201 199
 $insert_query = $dbi->create_query($insert_tmpl);
202 200
 $insert_query->bind_filter(sub {
203
-    my ($value, $table, $column) = @_;
201
+    my ($value, $table, $column, $dbi) = @_;
204 202
     
205 203
     if ($table eq '' && $column eq 'key1')
206 204
     {
... ...
@@ -209,7 +207,7 @@ $insert_query->bind_filter(sub {
209 207
     return $value;
210 208
 });
211 209
 $dbi->query($insert_query, {key1 => 1, key2 => 2});
212
-$select_query = $dbi->create_query($SELECT_TMPL->{0});
210
+$select_query = $dbi->create_query($SELECT_TMPLS->{0});
213 211
 $select_query->fetch_filter(sub {
214 212
     my ($value, $key, $dbi, $infos) = @_;
215 213
     my ($type, $sth, $i) = @{$infos}{qw/type sth index/};
... ...
@@ -225,32 +223,23 @@ $result = $dbi->query($select_query);
225 223
 $rows = $result->fetch_hash_all;
226 224
 is_deeply($rows, [{key1 => 2, key2 => 6}], "$test : bind_filter fetch_filter");
227 225
 
228
-$dbi->do("delete from table1;");
229
-$insert_query->no_bind_filters(['key1']);
230
-$select_query->no_fetch_filters(['key2']);
231
-$dbi->query($insert_query, {key1 => 1, key2 => 2});
232
-$result = $dbi->query($select_query);
233
-$rows = $result->fetch_hash_all;
234
-is_deeply($rows, [{key1 => 1, key2 => 2}], "$test : no_fetch_filters no_bind_filters");
235
-
236 226
 $dbi->do($DROP_TABLE->{0});
237 227
 $dbi->do($CREATE_TABLE->{0});
238 228
 $insert_tmpl  = "insert into table1 {insert table1.key1 table1.key2}";
239 229
 $insert_query = $dbi->create_query($insert_tmpl);
240 230
 $insert_query->bind_filter(sub {
241
-    my ($value, $key, $dbi, $infos) = @_;
242
-    my ($table, $column) = @{$infos}{qw/table column/};
231
+    my ($value, $table, $column, $dbi) = @_;
243 232
     
244
-    if ($key eq 'table1.key1' && $table eq 'table1' && $column eq 'key1') {
233
+    if ($table eq 'table1' && $column eq 'key1') {
245 234
         return $value * 3;
246 235
     }
247 236
     return $value;
248 237
 });
249
-$dbi->query($insert_query, {table1 => {key1 => 1, key2 => 2}});
250
-$select_query = $dbi->create_query($SELECT_TMPL->{0});
238
+$dbi->query($insert_query, {key1 => 1, key2 => 2});
239
+$select_query = $dbi->create_query($SELECT_TMPLS->{0});
251 240
 $result       = $dbi->query($select_query);
252 241
 $rows = $result->fetch_hash_all;
253
-is_deeply($rows, [{key1 => 3, key2 => 2}], "$test : insert with table name");
242
+is_deeply($rows, [{key1 => 3, key2 => 2}], "$test : insert with id");
254 243
 
255 244
 test 'Filter in';
256 245
 $insert_tmpl  = "insert into table1 {insert key1 key2};";
... ...
@@ -259,15 +248,14 @@ $dbi->query($insert_query, {key1 => 2, key2 => 4});
259 248
 $select_tmpl = "select * from table1 where {in table1.key1 2} and {in table1.key2 2}";
260 249
 $select_query = $dbi->create_query($select_tmpl);
261 250
 $select_query->bind_filter(sub {
262
-    my ($value, $key, $dbi, $infos) = @_;
263
-    my ($table, $column) = @{$infos}{qw/table column/};
251
+    my ($value, $table, $column, $dbi) = @_;
264 252
     
265
-    if ($key eq 'table1.key1' && $table eq 'table1' && $column eq 'key1' || $key eq 'table1.key2') {
253
+    if ($table eq 'table1' && $column eq 'key1') {
266 254
         return $value * 2;
267 255
     }
268 256
     return $value;
269 257
 });
270
-$result = $dbi->query($select_query, {table1 => {key1 => [1,5], key2 => [2,5]}});
258
+$result = $dbi->query($select_query, {key1 => [1,5], key2 => [2,4]});
271 259
 $rows = $result->fetch_hash_all;
272 260
 is_deeply($rows, [{key1 => 2, key2 => 4}], "$test : bind_filter");
273 261
 
... ...
@@ -285,15 +273,15 @@ $result = $dbi->query($query, {key1 => 1, key2 => 3, key3 => 4, key4 => 3, key5
285 273
 $rows = $result->fetch_hash_all;
286 274
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic tag1");
287 275
 
288
-$tmpl = "select * from table1 where {= table1.key1} and {<> table1.key2} and {< table1.key3} and {> table1.key4} and {>= table1.key5};";
276
+$tmpl = "select * from table1 where {= table1.key1#id} and {<> table1.key2#id} and {< table1.key3#id} and {> table1.key4#id} and {>= table1.key5#id};";
289 277
 $query = $dbi->create_query($tmpl);
290
-$result = $dbi->query($query, {table1 => {key1 => 1, key2 => 3, key3 => 4, key4 => 3, key5 => 5}});
278
+$result = $dbi->query($query, {id => {key1 => 1, key2 => 3, key3 => 4, key4 => 3, key5 => 5}});
291 279
 $rows = $result->fetch_hash_all;
292
-is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic tag1 with table");
280
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic tag1 with id");
293 281
 
294 282
 $tmpl = "select * from table1 where {= table1.key1} and {<> table1.key2} and {< table1.key3} and {> table1.key4} and {>= table1.key5};";
295 283
 $query = $dbi->create_query($tmpl);
296
-$result = $dbi->query($query, {'table1.key1' => 1, 'table1.key2' => 3, 'table1.key3' => 4, 'table1.key4' => 3, 'table1.key5' => 5});
284
+$result = $dbi->query($query, {key1 => 1, key2 => 3, key3 => 4, key4 => 3, key5 => 5});
297 285
 $rows = $result->fetch_hash_all;
298 286
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic tag1 with table dot");
299 287
 
... ...
@@ -303,15 +291,15 @@ $result = $dbi->query($query, {key1 => 1, key2 => '%2%'});
303 291
 $rows = $result->fetch_hash_all;
304 292
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic tag2");
305 293
 
306
-$tmpl = "select * from table1 where {<= table1.key1} and {like table1.key2};";
294
+$tmpl = "select * from table1 where {<= table1.key1#id} and {like table1.key2#id};";
307 295
 $query = $dbi->create_query($tmpl);
308
-$result = $dbi->query($query, {table1 => {key1 => 1, key2 => '%2%'}});
296
+$result = $dbi->query($query, {id => {key1 => 1, key2 => '%2%'}});
309 297
 $rows = $result->fetch_hash_all;
310 298
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic tag2 with table");
311 299
 
312 300
 $tmpl = "select * from table1 where {<= table1.key1} and {like table1.key2};";
313 301
 $query = $dbi->create_query($tmpl);
314
-$result = $dbi->query($query, {'table1.key1' => 1, 'table1.key2' => '%2%'});
302
+$result = $dbi->query($query, {'key1' => 1, 'key2' => '%2%'});
315 303
 $rows = $result->fetch_hash_all;
316 304
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic tag2 with table dot");
317 305
 
... ...
@@ -329,15 +317,15 @@ $result = $dbi->query($query, {key1 => [9, 1]});
329 317
 $rows = $result->fetch_hash_all;
330 318
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic");
331 319
 
332
-$tmpl = "select * from table1 where {in table1.key1 2};";
320
+$tmpl = "select * from table1 where {in table1.key1#id 2};";
333 321
 $query = $dbi->create_query($tmpl);
334
-$result = $dbi->query($query, {table1 => {key1 => [9, 1]}});
322
+$result = $dbi->query($query, {id => {key1 => [9, 1]}});
335 323
 $rows = $result->fetch_hash_all;
336 324
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : with table");
337 325
 
338
-$tmpl = "select * from table1 where {in table1.key1 2};";
326
+$tmpl = "select * from table1 where {in table1.key1#id 2};";
339 327
 $query = $dbi->create_query($tmpl);
340
-$result = $dbi->query($query, {'table1.key1' => [9, 1]});
328
+$result = $dbi->query($query, {id => {'key1' => [9, 1]}});
341 329
 $rows = $result->fetch_hash_all;
342 330
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : with table dot");
343 331
 
... ...
@@ -347,25 +335,17 @@ $dbi->do("delete from table1");
347 335
 $insert_tmpl = 'insert into table1 {insert key1 key2 key3 key4 key5}';
348 336
 $dbi->query($insert_tmpl, {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
349 337
 
350
-$result = $dbi->query($SELECT_TMPL->{0});
338
+$result = $dbi->query($SELECT_TMPLS->{0});
351 339
 $rows = $result->fetch_hash_all;
352 340
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : basic");
353 341
 
354 342
 $dbi->do("delete from table1");
355
-$insert_tmpl = 'insert into table1 {insert table1.key1 table1.key2 table1.key3 table1.key4 table1.key5}';
356
-$dbi->query($insert_tmpl, {table1 => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}});
357
-$result = $dbi->query($SELECT_TMPL->{0});
343
+$insert_tmpl = 'insert into table1 {insert table1.key1#id table1.key2#id table1.key3#id table1.key4#id table1.key5#id}';
344
+$dbi->query($insert_tmpl, {id => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}});
345
+$result = $dbi->query($SELECT_TMPLS->{0});
358 346
 $rows = $result->fetch_hash_all;
359 347
 is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : with table name");
360 348
 
361
-$dbi->do("delete from table1");
362
-$insert_tmpl = 'insert into table1 {insert table1.key1 table1.key2 table1.key3 table1.key4 table1.key5}';
363
-$dbi->query($insert_tmpl, {'table1.key1' => 1, 'table1.key2' => 2, 'table1.key3' => 3, 'table1.key4' => 4, 'table1.key5' => 5});
364
-$result = $dbi->query($SELECT_TMPL->{0});
365
-$rows = $result->fetch_hash_all;
366
-is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}], "$test : with table name dot");
367
-
368
-
369 349
 test 'DBIx::Custom::SQL::Template update tag';
370 350
 $dbi->do("delete from table1");
371 351
 $insert_tmpl = "insert into table1 {insert key1 key2 key3 key4 key5}";
... ...
@@ -375,25 +355,18 @@ $dbi->query($insert_tmpl, {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 1
375 355
 $update_tmpl = 'update table1 {update key1 key2 key3 key4} where {= key5}';
376 356
 $dbi->query($update_tmpl, {key1 => 1, key2 => 1, key3 => 1, key4 => 1, key5 => 5});
377 357
 
378
-$result = $dbi->query($SELECT_TMPL->{0});
358
+$result = $dbi->query($SELECT_TMPLS->{0});
379 359
 $rows = $result->fetch_hash_all;
380 360
 is_deeply($rows, [{key1 => 1, key2 => 1, key3 => 1, key4 => 1, key5 => 5},
381 361
                   {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}], "$test : basic");
382 362
 
383
-$update_tmpl = 'update table1 {update table1.key1 table1.key2 table1.key3 table1.key4} where {= table1.key5}';
384
-$dbi->query($update_tmpl, {table1 => {key1 => 3, key2 => 3, key3 => 3, key4 => 3, key5 => 5}});
385
-$result = $dbi->query($SELECT_TMPL->{0});
363
+$update_tmpl = 'update table1 {update table1.key1#id table1.key2#id table1.key3#id table1.key4#id} where {= table1.key5#id}';
364
+$dbi->query($update_tmpl, {id => {key1 => 3, key2 => 3, key3 => 3, key4 => 3, key5 => 5}});
365
+$result = $dbi->query($SELECT_TMPLS->{0});
386 366
 $rows = $result->fetch_hash_all;
387 367
 is_deeply($rows, [{key1 => 3, key2 => 3, key3 => 3, key4 => 3, key5 => 5},
388 368
                   {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}], "$test : with table name");
389 369
 
390
-$update_tmpl = 'update table1 {update table1.key1 table1.key2 table1.key3 table1.key4} where {= table1.key5}';
391
-$dbi->query($update_tmpl, {'table1.key1' => 4, 'table1.key2' => 4, 'table1.key3' => 4, 'table1.key4' => 4, 'table1.key5' => 5});
392
-$result = $dbi->query($SELECT_TMPL->{0});
393
-$rows = $result->fetch_hash_all;
394
-is_deeply($rows, [{key1 => 4, key2 => 4, key3 => 4, key4 => 4, key5 => 5},
395
-                  {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10}], "$test : with table name dot");
396
-
397 370
 test 'transaction';
398 371
 $dbi->do($DROP_TABLE->{0});
399 372
 $dbi->do($CREATE_TABLE->{0});
... ...
@@ -402,7 +375,7 @@ $dbi->run_transaction(sub {
402 375
     $dbi->query($insert_tmpl, {key1 => 1, key2 => 2});
403 376
     $dbi->query($insert_tmpl, {key1 => 3, key2 => 4});
404 377
 });
405
-$result = $dbi->query($SELECT_TMPL->{0});
378
+$result = $dbi->query($SELECT_TMPLS->{0});
406 379
 $rows   = $result->fetch_hash_all;
407 380
 is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "$test : commit");
408 381
 
... ...
@@ -419,7 +392,7 @@ eval{
419 392
 };
420 393
 like($@, qr/Fatal Error.*Rollback is success/ms, "$test : Rollback success message");
421 394
 ok(!$dbi->dbh->{RaiseError}, "$test : restore RaiseError value");
422
-$result = $dbi->query($SELECT_TMPL->{0});
395
+$result = $dbi->query($SELECT_TMPLS->{0});
423 396
 $rows   = $result->fetch_hash_all;
424 397
 is_deeply($rows, [], "$test : rollback");
425 398
 
... ...
@@ -455,20 +428,12 @@ $dbi = DBIx::Custom->new($NEW_ARGS->{0});
455 428
 eval{$dbi->create_query("{p }")};
456 429
 ok($@, "$test : create_query invalid SQL template");
457 430
 
458
-$dbi = DBIx::Custom->new($NEW_ARGS->{0});
459
-$dbi->do($CREATE_TABLE->{0});
460
-$query = $dbi->create_query("select * from table1 where {= key1}");
461
-eval{$dbi->query($query, {key2 => 1})};
462
-like($@, qr/Corresponding key is not found in your parameters/, 
463
-        "$test : execute corresponding key not found");
464
-
465
-
466 431
 test 'insert';
467 432
 $dbi = DBIx::Custom->new($NEW_ARGS->{0});
468 433
 $dbi->do($CREATE_TABLE->{0});
469 434
 $dbi->insert('table1', {key1 => 1, key2 => 2});
470 435
 $dbi->insert('table1', {key1 => 3, key2 => 4});
471
-$result = $dbi->query($SELECT_TMPL->{0});
436
+$result = $dbi->query($SELECT_TMPLS->{0});
472 437
 $rows   = $result->fetch_hash_all;
473 438
 is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "$test : basic");
474 439
 
... ...
@@ -476,14 +441,14 @@ $dbi->do('delete from table1');
476 441
 $dbi->insert('table1', {key1 => 1, key2 => 2}, sub {
477 442
     my $query = shift;
478 443
     $query->bind_filter(sub {
479
-        my ($value, $key) = @_;
480
-        if ($key eq 'key1') {
444
+        my ($value, $table, $column, $dbi) = @_;
445
+        if ($column eq 'key1') {
481 446
             return $value * 3;
482 447
         }
483 448
         return $value;
484 449
     });
485 450
 });
486
-$result = $dbi->query($SELECT_TMPL->{0});
451
+$result = $dbi->query($SELECT_TMPLS->{0});
487 452
 $rows   = $result->fetch_hash_all;
488 453
 is_deeply($rows, [{key1 => 3, key2 => 2}], "$test : edit_query_callback");
489 454
 
... ...
@@ -507,21 +472,21 @@ $dbi->do($CREATE_TABLE->{1});
507 472
 $dbi->insert('table1', {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
508 473
 $dbi->insert('table1', {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
509 474
 $dbi->update('table1', {key2 => 11}, {key1 => 1});
510
-$result = $dbi->query($SELECT_TMPL->{0});
475
+$result = $dbi->query($SELECT_TMPLS->{0});
511 476
 $rows   = $result->fetch_hash_all;
512 477
 is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
513 478
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
514 479
                   "$test : basic");
515 480
                   
516
-#$dbi->do("delete from table1");
517
-#$dbi->insert('table1', {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
518
-#$dbi->insert('table1', {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
519
-#$dbi->update('table1', {key2 => 12}, {key2 => 2, key3 => 3});
520
-#$result = $dbi->query($SELECT_TMPL->{0});
521
-#$rows   = $result->fetch_hash_all;
522
-#is_deeply($rows, [{key1 => 1, key2 => 12, key3 => 3, key4 => 4, key5 => 5},
523
-#                  {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
524
-#                  "$test : update key same as search key");
481
+$dbi->do("delete from table1");
482
+$dbi->insert('table1', {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
483
+$dbi->insert('table1', {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
484
+$dbi->update('table1', {key2 => 12}, {key2 => 2, key3 => 3});
485
+$result = $dbi->query($SELECT_TMPLS->{0});
486
+$rows   = $result->fetch_hash_all;
487
+is_deeply($rows, [{key1 => 1, key2 => 12, key3 => 3, key4 => 4, key5 => 5},
488
+                  {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
489
+                  "$test : update key same as search key");
525 490
 
526 491
 $dbi->do("delete from table1");
527 492
 $dbi->insert('table1', {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
... ...
@@ -529,14 +494,14 @@ $dbi->insert('table1', {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10})
529 494
 $dbi->update('table1', {key2 => 11}, {key1 => 1}, sub {
530 495
     my $query = shift;
531 496
     $query->bind_filter(sub {
532
-        my ($value, $key) = @_;
533
-        if ($key eq 'key2') {
497
+        my ($value, $table, $column, $dbi) = @_;
498
+        if ($column eq 'key2') {
534 499
             return $value * 2;
535 500
         }
536 501
         return $value;
537 502
     });
538 503
 });
539
-$result = $dbi->query($SELECT_TMPL->{0});
504
+$result = $dbi->query($SELECT_TMPLS->{0});
540 505
 $rows   = $result->fetch_hash_all;
541 506
 is_deeply($rows, [{key1 => 1, key2 => 22, key3 => 3, key4 => 4, key5 => 5},
542 507
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
... ...
@@ -544,7 +509,7 @@ is_deeply($rows, [{key1 => 1, key2 => 22, key3 => 3, key4 => 4, key5 => 5},
544 509
 
545 510
 $dbi->update('table1', {key2 => 11}, {key1 => 1}, '   ', sub {
546 511
     my $query = shift;
547
-    is($query->sql, 'update table1 set key2 = ? where key1 = ?    ;',
512
+    is($query->sql, 'update table1 set key2 = ? where table1.key1 = ?    ;',
548 513
        "$test: append statement");
549 514
 });
550 515
 
... ...
@@ -573,11 +538,11 @@ $dbi->insert('table1', {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10})
573 538
 $dbi->update_all('table1', {key2 => 10}, sub {
574 539
     my $query = shift;
575 540
     $query->bind_filter(sub {
576
-        my ($value, $key) = @_;
541
+        my ($value, $table, $column, $dbi) = @_;
577 542
         return $value * 2;
578 543
     })
579 544
 });
580
-$result = $dbi->query($SELECT_TMPL->{0});
545
+$result = $dbi->query($SELECT_TMPLS->{0});
581 546
 $rows   = $result->fetch_hash_all;
582 547
 is_deeply($rows, [{key1 => 1, key2 => 20, key3 => 3, key4 => 4, key5 => 5},
583 548
                   {key1 => 6, key2 => 20, key3 => 8, key4 => 9, key5 => 10}],
... ...
@@ -590,7 +555,7 @@ $dbi->do($CREATE_TABLE->{0});
590 555
 $dbi->insert('table1', {key1 => 1, key2 => 2});
591 556
 $dbi->insert('table1', {key1 => 3, key2 => 4});
592 557
 $dbi->delete('table1', {key1 => 1});
593
-$result = $dbi->query($SELECT_TMPL->{0});
558
+$result = $dbi->query($SELECT_TMPLS->{0});
594 559
 $rows   = $result->fetch_hash_all;
595 560
 is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : basic");
596 561
 
... ...
@@ -600,17 +565,17 @@ $dbi->insert('table1', {key1 => 3, key2 => 4});
600 565
 $dbi->delete('table1', {key2 => 1}, sub {
601 566
     my $query = shift;
602 567
     $query->bind_filter(sub {
603
-        my ($value, $key) = @_;
568
+        my ($value, $table, $column, $dbi) = @_;
604 569
         return $value * 2;
605 570
     });
606 571
 });
607
-$result = $dbi->query($SELECT_TMPL->{0});
572
+$result = $dbi->query($SELECT_TMPLS->{0});
608 573
 $rows   = $result->fetch_hash_all;
609 574
 is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : query edit callback");
610 575
 
611 576
 $dbi->delete('table1', {key1 => 1}, '   ', sub {
612 577
     my $query = shift;
613
-    is($query->sql, 'delete from table1 where key1 = ?    ;',
578
+    is($query->sql, 'delete from table1 where table1.key1 = ?    ;',
614 579
        "$test: append statement");
615 580
 });
616 581
 
... ...
@@ -641,7 +606,7 @@ $dbi->do($CREATE_TABLE->{0});
641 606
 $dbi->insert('table1', {key1 => 1, key2 => 2});
642 607
 $dbi->insert('table1', {key1 => 3, key2 => 4});
643 608
 $dbi->delete_all('table1');
644
-$result = $dbi->query($SELECT_TMPL->{0});
609
+$result = $dbi->query($SELECT_TMPLS->{0});
645 610
 $rows   = $result->fetch_hash_all;
646 611
 is_deeply($rows, [], "$test : basic");
647 612
 
... ...
@@ -670,8 +635,8 @@ is_deeply($rows, [{key1 => 3, key2 => 4}], "$test : append statement");
670 635
 $rows = $dbi->select('table1', {key1 => 2}, sub {
671 636
     my $query = shift;
672 637
     $query->bind_filter(sub {
673
-        my ($value, $key) = @_;
674
-        if ($key eq 'key1') {
638
+        my ($value, $table, $column, $dbi) = @_;
639
+        if ($column eq 'key1') {
675 640
             return $value - 1;
676 641
         }
677 642
         return $value;
-6
t/dbix-custom-core.t 1000644 → 1000755
... ...
@@ -215,9 +215,3 @@ test 'Accessor';
215 215
 $dbi = DBIx::Custom->new;
216 216
 $dbi->options({opt1 => 1, opt2 => 2});
217 217
 is_deeply(scalar $dbi->options, {opt1 => 1, opt2 => 2}, "$test : options");
218
-
219
-$dbi->no_bind_filters(['a', 'b']);
220
-is_deeply(scalar $dbi->no_bind_filters, ['a', 'b'], "$test: no_bind_filters");
221
-
222
-$dbi->no_fetch_filters(['a', 'b']);
223
-is_deeply(scalar $dbi->no_fetch_filters, ['a', 'b'], "$test: no_fetch_filters");
-8
t/dbix-custom-query.t 1000644 → 1000755
... ...
@@ -18,20 +18,12 @@ $query = DBIx::Custom::Query->new(
18 18
     sql              => 'a',
19 19
     key_infos        => 'b',
20 20
     bind_filter      => 'c',
21
-    no_bind_filters  => [qw/d e/],
22 21
     sth              => 'e',
23 22
     fetch_filter     => 'f',
24
-    no_fetch_filters => [qw/g h/],
25 23
 );
26 24
 
27 25
 is($query->sql, 'a', "$test : sql");
28 26
 is($query->key_infos, 'b', "$test : key_infos ");
29 27
 is($query->bind_filter, 'c', "$test : bind_filter");
30
-is_deeply($query->no_bind_filters, [qw/d e/], "$test : no_bind_filters");
31
-is_deeply($query->_no_bind_filters, {d => 1, e => 1}, "$test : _no_bind_filters");
32
-is_deeply($query->no_fetch_filters, [qw/g h/], "$test : no_fetch_filters");
33 28
 is($query->sth, 'e', "$test : sth");
34 29
 
35
-$query->no_bind_filters(undef);
36
-is_deeply(scalar $query->_no_bind_filters, {}, "$test _no_bind_filters undef value");
37
-
-11
t/dbix-custom-result-sqlite.t 1000644 → 1000755
... ...
@@ -227,17 +227,6 @@ $result->fetch_filter($fetch_filter);
227 227
 $rows = $result->fetch_hash_all;
228 228
 is_deeply($rows, [{key1 => 3, key2 => 2}, {key1 => 3, key2 => 4}], "$test hash");
229 229
 
230
-$result = query($dbh, $sql);
231
-$result->no_fetch_filters(['key1']);
232
-$rows = $result->fetch_all;
233
-is_deeply($rows, [[1, 2], [3, 4]], "$test array no filter keys");
234
-
235
-$result = query($dbh, $sql);
236
-$result->no_fetch_filters(['key1']);
237
-$rows = $result->fetch_hash_all;
238
-is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "$test hash no filter keys");
239
-
240
-
241 230
 test 'finish';
242 231
 $result = query($dbh, $sql);
243 232
 $result->fetch;