Showing 2 changed files with 42 additions and 4 deletions
+32 -3
lib/DBIx/Custom.pm
... ...
@@ -410,6 +410,17 @@ sub _build_bind_values {
410 410
     
411 411
     # binding values
412 412
     my @bind_values;
413
+
414
+    # Filter
415
+    $filter ||= {};
416
+    
417
+    # Parameter
418
+    $params ||= {};
419
+    
420
+    # Check filter
421
+    $self->_check_filter($self->filters, $filter,
422
+                         $self->default_bind_filter, $params)
423
+      if $self->filter_check;
413 424
     
414 425
     # Build bind values
415 426
     my $count = {};
... ...
@@ -423,9 +434,6 @@ sub _build_bind_values {
423 434
                   ? $params->{$column}->[$count->{$column} || 0]
424 435
                   : $params->{$column};
425 436
         
426
-        # Filter
427
-        $filter ||= {};
428
-        
429 437
         # Filter name
430 438
         my $fname = $filter->{$column} || $self->default_bind_filter || '';
431 439
         
... ...
@@ -454,6 +462,27 @@ sub _build_bind_values {
454 462
     return \@bind_values;
455 463
 }
456 464
 
465
+sub _check_filter {
466
+    my ($self, $filters, $filter, $default_filter, $params) = @_;
467
+    
468
+    # Filter name not exists
469
+    foreach my $fname (values %$filter) {
470
+        croak qq{Bind filter "$fname" is not registered}
471
+          unless exists $filters->{$fname};
472
+    }
473
+    
474
+    # Default filter name not exists
475
+    croak qq{Default bind filter "$default_filter" is not registered}
476
+      if $default_filter && ! exists $filters->{$default_filter};
477
+    
478
+    # Column name not exists
479
+    foreach my $column (keys %$filter) {
480
+        
481
+        croak qq{Column name "$column" in bind filter is not found in paramters}
482
+          unless exists $params->{$column};
483
+    }
484
+}
485
+
457 486
 =head1 NAME
458 487
 
459 488
 DBIx::Custom - DBI interface, having hash parameter binding and filtering system
+10 -1
t/dbix-custom-core-sqlite.t
... ...
@@ -513,11 +513,20 @@ eval{$result->fetch_hash_first};
513 513
 ok(!$@, "$test : hash : filter_check off");
514 514
 
515 515
 
516
-test 'filter_check in binding parameter';
516
+test 'filter_check in parameter binding';
517 517
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
518 518
 $dbi->execute($CREATE_TABLE->{0});
519 519
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
520 520
 
521
+$dbi->default_bind_filter('not_exists');
522
+eval{$dbi->select(table => 'table1')};
523
+like($@, qr/\QDefault bind filter "not_exists" is not registered/, "$test : default_bind_filter");
521 524
 
525
+$dbi->default_bind_filter(undef);
526
+eval{$dbi->select(table => 'table1', filter => {key1 => 'not_exists'})};
527
+like($@, qr/\QBind filter "not_exists" is not registered/, "$test : bind_filter");
522 528
 
529
+eval{$dbi->select(table => 'table1', filter => {not_exists => 'encode_utf8'})};
530
+like($@, qr/\QColumn name "not_exists" in bind filter is not found in paramters/,
531
+     "$test : fetch_filter");
523 532