DBomb
view release on metacpan or search on metacpan
DBomb/Query/Update.pm view on Meta::CPAN
$self->where_obj(new DBomb::Query::Expr());
for(@_){
if ( UNIVERSAL::isa($_,'DBI::db')) { $self->dbh($_); }
elsif ( UNIVERSAL::isa($_,'ARRAY')) { $self->_column_names($_); }
else{
croak "unrecognized argument to Update->new";
}
}
}
## set the table
## table($_table_name)
sub table
{
my $self = shift;
assert(UNIVERSAL::isa($self,__PACKAGE__));
while(my $a = shift){
if ( UNIVERSAL::isa($a,'DBI::db')) { $self->dbh($a); }
else { $self->_table_name($a) }
}
return $self;
}
## set({ name => value})
## set( name => value)
sub set
{
my $self = shift;
if (@_ == 1){
my $hash = shift;
assert(UNIVERSAL::isa($hash,'HASH'), "Update::set requires a hashref (or name value)");
while (my ($column_name, $value) = each %$hash){
$self->set($column_name, $value);
}
}
else{
assert(@_ == 2, "Update::set requires a name and a value (or hashref)");
my ($column_name, $value) = @_;
## for expression objects, extract the bind_value
if (UNIVERSAL::isa($value,'DBomb::Query::Expr')){
}
push @{$self->_column_names}, $column_name;
push @{$self->_values}, $value;
}
return $self;
}
## Same as prepare->execute
## update()
## update(@bind_values)
## update($dbh,@bind_values)
sub update
{
my $self = shift;
my @bv;
for (@_){
if (UNIVERSAL::isa($_,'DBI::db')){ $self->dbh($_) }
else { push @bv, $_ }
}
assert(defined($self->dbh), 'update requires a dbh');
if (not $self->sth){ $self->prepare }
return $self->execute(@bv);
}
## execute()
## execute(@bind_values)
## execute($dbh,@bind_values)
sub execute
{
my $self = shift;
my @bv;
for (@_){
if (UNIVERSAL::isa($_,'DBI::db')){ $self->dbh($_) }
else { push @bv, $_ }
}
assert(defined($self->dbh), 'update requires a dbh');
if (not $self->sth){ $self->prepare }
return $self->sth->execute((@{$self->bind_values},@bv));
}
## prepare()
## prepare($dbh)
sub prepare
{
my $self = shift;
for (@_){
$self->dbh($_) if UNIVERSAL::isa($_, 'DBI::db');
}
assert(defined($self->dbh), 'prepare requires a dbh');
assert($self->_table_name, 'update requires a table_name');
assert(@{$self->_column_names} > 0, 'update requires at least one column');
if ($DBomb::Conf::prepare_cached){
$self->sth($self->dbh->prepare_cached(scalar $self->sql));
}
else{
$self->sth($self->dbh->prepare(scalar $self->sql));
}
return $self;
}
## where(EXPR, @bind_values)
sub where
{
my $self = shift;
( run in 0.941 second using v1.01-cache-2.11-cpan-39bf76dae61 )