AnyData
view release on metacpan or search on metacpan
lib/AnyData/Storage/TiedHash.pm view on Meta::CPAN
INDEX => 0,
RECORDS => $records,
ad => $ad,
del_marker => "\0",
needs_packing => 0,
PERMS => $perms,
};
return bless $self, $class;
}
sub verify_columns {
my $col_names = shift;
my $val = shift;
my %is_col = map {$_ => 1} @$col_names;
my $errstr = "ERROR: XXX is not a column in the table!\n";
$errstr .= scalar @$col_names
? " columns are: " . join "~",@$col_names,"\n"
: " couldn't find any column names\n";
if (ref $val eq 'HASH') {
for (keys %$val) {
$errstr =~ s/XXX/$_/;
lib/AnyData/Storage/TiedHash.pm view on Meta::CPAN
}
}
sub STORE {
my($self,$key,$value) = @_;
#my @c = caller 1;
$self->{errstr} = "Can't store: file is opened in 'r' read-only mode!"
if $self->{PERMS} eq 'r';
return undef if $self->{errstr};
my @colnames = @{ $self->{ad}->col_names };
verify_columns(\@colnames,$value);
return $self->{ad}->update_multiple_rows($key,$value)
if ref $key eq 'HASH';
$self->{ad}->seek(0,2);
my @newrow;
for my $i(0..$#colnames) {
$newrow[$i] = $value->{$colnames[$i]};
next if defined $newrow[$i];
$newrow[$i] = $key if $colnames[$i] eq $self->{ad}->key_col;
$newrow[$i] = undef unless $newrow[$i];
}
( run in 0.436 second using v1.01-cache-2.11-cpan-5467b0d2c73 )