Showing 1 changed files with 36 additions and 28 deletions
+36 -28
lib/DBIx/Custom.pm
... ...
@@ -497,25 +497,46 @@ sub execute {
497 497
           $filter->{$column} = $self->filters->{$name};
498 498
         }
499 499
     }
500
-    
501
-    # Create bind values
502
-    my ($bind, $bind_types) = $self->_create_bind_values($param, $query->{columns},
503
-      $filter, $type_filters, $opt{bind_type} || $opt{type} || {});
504 500
 
505 501
     # Execute
506 502
     my $sth = $query->{sth};
507 503
     my $affected;
508
-    eval {
509
-        if ($opt{bind_type} || $opt{type}) {
510
-            $sth->bind_param($_ + 1, $bind->[$_],
511
-                $bind_types->[$_] ? $bind_types->[$_] : ())
512
-              for (0 .. @$bind - 1);
513
-            $affected = $sth->execute;
514
-        }
515
-        else {
516
-            $affected = $sth->execute(@$bind);
517
-        }
518
-    };
504
+    if (!$query->{duplicate} && $type_rule_off && !keys %$filter &&
505
+      !$opt{bind_type} && !$opt{type} && !$ENV{DBIX_CUSTOM_DEBUG})
506
+    {
507
+        eval { $affected = $sth->execute(map { $param->{$_} } @{$query->{columns}}) };
508
+    }
509
+    else {
510
+        # Create bind values
511
+        my ($bind, $bind_types) = $self->_create_bind_values($param, $query->{columns},
512
+          $filter, $type_filters, $opt{bind_type} || $opt{type} || {});
513
+
514
+        # Execute
515
+        eval {
516
+            if ($opt{bind_type} || $opt{type}) {
517
+                $sth->bind_param($_ + 1, $bind->[$_],
518
+                    $bind_types->[$_] ? $bind_types->[$_] : ())
519
+                  for (0 .. @$bind - 1);
520
+                $affected = $sth->execute;
521
+            }
522
+            else {
523
+                $affected = $sth->execute(@$bind);
524
+            }
525
+
526
+            # DEBUG message
527
+            if ($ENV{DBIX_CUSTOM_DEBUG}) {
528
+                warn "SQL:\n" . $query->{sql} . "\n";
529
+                my @output;
530
+                for my $value (@$bind) {
531
+                    $value = 'undef' unless defined $value;
532
+                    $value = encode($ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8', $value)
533
+                      if utf8::is_utf8($value);
534
+                    push @output, $value;
535
+                }
536
+                warn "Bind values: " . join(', ', @output) . "\n\n";
537
+            }
538
+        };
539
+    }
519 540
     
520 541
     $self->_croak($@, qq{. Following SQL is executed.\n}
521 542
       . qq{$query->{sql}\n} . _subname) if $@;
... ...
@@ -523,19 +544,6 @@ sub execute {
523 544
     # Remove id from parameter
524 545
     delete $param->{$_} for (@cleanup, @{$opt{cleanup} || []});
525 546
     
526
-    # DEBUG message
527
-    if ($ENV{DBIX_CUSTOM_DEBUG}) {
528
-        warn "SQL:\n" . $query->{sql} . "\n";
529
-        my @output;
530
-        for my $value (@$bind) {
531
-            $value = 'undef' unless defined $value;
532
-            $value = encode($ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8', $value)
533
-              if utf8::is_utf8($value);
534
-            push @output, $value;
535
-        }
536
-        warn "Bind values: " . join(', ', @output) . "\n\n";
537
-    }
538
-    
539 547
     # Not select statement
540 548
     return $affected unless $sth->{NUM_OF_FIELDS};
541 549