}
sub _execute_array {
- my ($self, $source, $sth, $bind, $cols, $data, $after_exec_cb) = @_;
+ my ($self, $source, $sth, $bind, $cols, $data, @extra) = @_;
my $guard = $self->txn_scope_guard unless $self->{transaction_depth} != 0;
$placeholder_index++;
}
- my $rv;
- eval {
- $rv = $sth->execute_array({ArrayTupleStatus => $tuple_status});
- $after_exec_cb->() if $after_exec_cb;
+ my $rv = eval {
+ $self->_dbh_execute_array($sth, $tuple_status, @extra);
};
my $err = $@ || $sth->errstr;
return $rv;
}
+sub _dbh_execute_array {
+ my ($self, $sth, $tuple_status, @extra) = @_;
+
+ return $sth->execute_array({ArrayTupleStatus => $tuple_status});
+}
+
sub _execute_array_empty {
my ($self, $sth, $count) = @_;
}
}
+sub _dbh_execute_array {
+ my ($self, $sth, $tuple_status, $cb) = @_;
+
+ my $rv = $self->next::method($sth, $tuple_status);
+ $cb->() if $cb;
+
+ return $rv;
+}
+
# Make sure blobs are not bound as placeholders, and return any non-empty ones
# as a hash.
sub _remove_blob_cols {