HDB
view release on metacpan or search on metacpan
lib/HDB/CMDS.pm view on Meta::CPAN
$table = _format_table_name($table) ;
if ($#_ == 1) { @up = HDB::CORE::parse_ref($_[1]) ;}
return $this->Error('Invalid table!') if !$table ;
return $this->Error('Nothing to insert!') if !@up ;
my @names = $this->names($table) ;
my @cols ;
if (ref($_[1]) eq 'HASH') {
my %up = @up ;
@up = () ;
foreach my $names_i ( @names ) {
if (defined $up{$names_i}) { push(@up , $up{$names_i}) ; push(@cols , $names_i) ;}
elsif (defined $up{uc($names_i)}) { push(@up , $up{uc($names_i)}) ; push(@cols , $names_i) ;}
elsif (defined $up{lc($names_i)}) { push(@up , $up{lc($names_i)}) ; push(@cols , $names_i) ;}
elsif (defined $up{"\u\L$names_i\E"}) { push(@up , $up{"\u\L$names_i\E"}) ; push(@cols , $names_i) ;}
}
}
else { @cols = @names ;}
foreach my $up_i ( @up ) {
if (ref($up_i) eq 'HASH') { $up_i = &HDB::Encode::Pack_HASH($up_i) ;}
elsif (ref($up_i) eq 'ARRAY') { $up_i = &HDB::Encode::Pack_ARRAY($up_i) ;}
&HDB::Parser::filter_null_bytes($up_i) ;
}
$this->_undef_sth ;
{
my @ins_pnt = ('?') x @up ;
$this->{sql} = "INSERT INTO $table (". join(',',@cols) .") VALUES (". join(',',@ins_pnt) .")" ;
eval { $this->{sth} = $this->dbh->prepare( $this->{sql} ) };
}
$this->{sth}->{ShowErrorStatement} = 1 ;
eval {
$this->lock_table($table) if $this->{SQL}{LOCK_TABLE} ;
$this->{sth}->execute(@up) ;
$this->unlock_table($table) if $this->{SQL}{LOCK_TABLE} ;
$this->{sth}->err ;
};
$this->_undef_sth ;
return $this->Error("SQL error: $this->{sql}\nERROR MSG:\n$@") if $@ ;
$this->ON_INSERT(\@cols,\@up) if $this->can('ON_INSERT') ;
return 1 ;
}
##########
# UPDATE #
##########
sub update {
my $this = shift ;
my ($table , $where , %up) = @_ ;
$table = _format_table_name($table) ;
if ($#_ == 2) { %up = HDB::CORE::parse_ref($_[2]) ;}
if (! $table) { $this->Error('Invalid table!') ;}
if (! %up) { $this->Error('Nothing to update!') ;}
$where = &HDB::Parser::Parse_Where($where,$this) ;
my ($set_cols,@up) ;
my @names = $this->names($table) ;
foreach my $names_i ( @names ) {
if (defined $up{$names_i}) { push(@up , $up{$names_i}) ; $set_cols .= "$names_i = ? , " ;}
elsif (defined $up{uc($names_i)}) { push(@up , $up{uc($names_i)}) ; $set_cols .= "\U$names_i\E = ? , " ;}
elsif (defined $up{lc($names_i)}) { push(@up , $up{lc($names_i)}) ; $set_cols .= "\L$names_i\E = ? , " ;}
elsif (defined $up{"\u\L$names_i\E"}) { push(@up , $up{"\u\L$names_i\E"}) ; $set_cols .= "\u\L$names_i\E = ? , " ;}
}
return if !@up ;
foreach my $up_i ( @up ) {
if (ref($up_i) eq 'HASH') { $up_i = &HDB::Encode::Pack_HASH($up_i) ;}
elsif (ref($up_i) eq 'ARRAY') { $up_i = &HDB::Encode::Pack_ARRAY($up_i) ;}
&HDB::Parser::filter_null_bytes($up_i) ;
}
$set_cols =~ s/ , $// ;
$this->{sql} = "UPDATE $table SET $set_cols $where" ;
$this->_undef_sth ;
eval { $this->{sth} = $this->dbh->prepare( $this->{sql} ) };
eval {
$this->lock_table($table) if $this->{SQL}{LOCK_TABLE} ;
$this->{sth}->execute(@up) ;
$this->unlock_table($table) if $this->{SQL}{LOCK_TABLE} ;
};
$this->_undef_sth ;
return $this->Error("SQL error: $this->{sql}\nERROR MSG:\n$@") if $@ ;
return 1 ;
}
##########
# DELETE #
##########
sub delete {
my $this = shift ;
my ($table , $where) = @_ ;
$table = _format_table_name($table) ;
( run in 5.084 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )