unless ref $values eq 'HASH';
my $cond = $self->_cond_for_update_delete;
-
- my $bind_attributes;
- foreach my $column ($self->result_source->columns) {
-
- $bind_attributes->{$column} = $self->result_source->column_info($column)->{bind_attributes}
- if defined $self->result_source->column_info($column)->{bind_attributes};
- }
- $self->result_source->storage->bind_attributes($bind_attributes);
-
+
return $self->result_source->storage->update(
- $self->result_source->from, $values, $cond
+ $self->result_source, $values, $cond
);
}
my $cond = $self->_cond_for_update_delete;
- $self->result_source->storage->delete($self->result_source->from, $cond);
+ $self->result_source->storage->delete($self->result_source, $cond);
return 1;
}
$self->throw_exception("No result_source set on this object; can't insert")
unless $source;
- my $bind_attributes;
- foreach my $column ($self->result_source->columns) {
-
- $bind_attributes->{$column} = $self->result_source->column_info($column)->{bind_attributes}
- if defined $self->result_source->column_info($column)->{bind_attributes};
- }
- $self->result_source->storage->bind_attributes($bind_attributes);
-
- $source->storage->insert($source->from, { $self->get_columns });
+ $source->storage->insert($source, { $self->get_columns });
$self->in_storage(1);
$self->{_dirty_columns} = {};
$self->{related_resultsets} = {};
$self->throw_exception("Cannot safely update a row in a PK-less table")
if ! keys %$ident_cond;
- my $bind_attributes;
- foreach my $column ($self->result_source->columns) {
-
- $bind_attributes->{$column} = $self->result_source->column_info($column)->{bind_attributes}
- if defined $self->result_source->column_info($column)->{bind_attributes};
- }
- $self->result_source->storage->bind_attributes($bind_attributes);
-
my $rows = $self->result_source->storage->update(
- $self->result_source->from, \%to_update, $ident_cond);
+ $self->result_source, \%to_update, $ident_cond);
if ($rows == 0) {
$self->throw_exception( "Can't update ${self}: row not found" );
} elsif ($rows > 1) {
unless exists $self->{_column_data}{$column};
}
$self->result_source->storage->delete(
- $self->result_source->from, $ident_cond);
+ $self->result_source, $ident_cond);
$self->in_storage(undef);
} else {
$self->throw_exception("Can't do class delete without a ResultSource instance")
__PACKAGE__->mk_group_accessors(
'simple' =>
qw/_connect_info _dbh _sql_maker _sql_maker_opts _conn_pid _conn_tid
- disable_sth_caching cursor on_connect_do transaction_depth bind_attributes/
+ disable_sth_caching cursor on_connect_do transaction_depth/
);
BEGIN {
}
sub _execute {
- my ($self, $op, $extra_bind, $ident, @args) = @_;
+ my ($self, $op, $extra_bind, $ident, $bind_attributes, @args) = @_;
+
my ($sql, @bind) = $self->sql_maker->$op($ident, @args);
unshift(@bind, @$extra_bind) if $extra_bind;
if ($self->debug) {
$rv = eval {
my $placeholder_index = 1;
- my $bind_attributes = $self->bind_attributes;
foreach my $bound (@bind) {
}
$sth->execute;
};
- $self->bind_attributes({});
if ($@ || !$rv) {
$self->throw_exception("Error executing '$sql': ".($@ || $sth->errstr));
}
sub insert {
- my ($self, $ident, $to_insert) = @_;
+ my ($self, $source, $to_insert) = @_;
+
+ my $ident = $source->from;
+ my $bind_attributes;
+ foreach my $column ($source->columns) {
+
+ $bind_attributes->{$column} = $source->column_info($column)->{bind_attributes}
+ if defined $source->column_info($column)->{bind_attributes};
+ }
+
$self->throw_exception(
"Couldn't insert ".join(', ',
map "$_ => $to_insert->{$_}", keys %$to_insert
)." into ${ident}"
- ) unless ($self->_execute('insert' => [], $ident, $to_insert));
+ ) unless ($self->_execute('insert' => [], $ident, $bind_attributes, $to_insert));
return $to_insert;
}
my %colvalues;
@colvalues{@$cols} = (0..$#$cols);
my ($sql, @bind) = $self->sql_maker->insert($table, \%colvalues);
-# print STDERR "BIND".Dumper(\@bind);
+
+ ##need this to support using bindtype=>columns for sql abstract
+ @bind = map {$_->[1]} @bind;
if ($self->debug) {
my @debug_bind = map { defined $_ ? qq{'$_'} : q{'NULL'} } @bind;
}
sub update {
- return shift->_execute('update' => [], @_);
+ my $self = shift @_;
+ my $source = shift @_;
+
+ my $bind_attributes;
+ foreach my $column ($source->columns) {
+
+ $bind_attributes->{$column} = $source->column_info($column)->{bind_attributes}
+ if defined $source->column_info($column)->{bind_attributes};
+ }
+
+ my $ident = $source->from;
+ return $self->_execute('update' => [], $ident, $bind_attributes, @_);
}
+
sub delete {
- return shift->_execute('delete' => [], @_);
+ my $self = shift @_;
+ my $source = shift @_;
+
+ my $bind_attrs = {}; ## If ever it's needed...
+ my $ident = $source->from;
+
+ return $self->_execute('delete' => [], $ident, $bind_attrs, @_);
}
sub _select {
($order ? (order_by => $order) : ())
};
}
- my @args = ('select', $attrs->{bind}, $ident, $select, $condition, $order);
+ my $bind_attrs = {}; ## Future support
+ my @args = ('select', $attrs->{bind}, $ident, $bind_attrs, $select, $condition, $order);
if ($attrs->{software_limit} ||
$self->sql_maker->_default_limit_syntax eq "GenericSubQ") {
$attrs->{software_limit} = 1;
plan tests => 2;
-# figure out if we've got a version of sqlite that is older than 3.2.6, in
-# which case COUNT(DISTINCT()) doesn't work
-my $is_broken_sqlite = 0;
-my ($sqlite_major_ver,$sqlite_minor_ver,$sqlite_patch_ver) =
- split /\./, $schema->storage->dbh->get_info(18);
-if( $schema->storage->dbh->get_info(17) eq 'SQLite' &&
- ( ($sqlite_major_ver < 3) ||
- ($sqlite_major_ver == 3 && $sqlite_minor_ver < 2) ||
- ($sqlite_major_ver == 3 && $sqlite_minor_ver == 2 && $sqlite_patch_ver < 6) ) ) {
- $is_broken_sqlite = 1;
-}
-
-
#Bindtest
{
my $new = $schema->resultset("Artist")->new({
is($resultset->name, 'JohnNapiorkowski', 'Testing New Name');
}
-