Objekte in MySQL und Objektmanager in Perl
CREATE TABLE `objects` (
`oid` varchar(128) NOT NULL DEFAULT '',
`att` varchar(128) NOT NULL DEFAULT '',
`val` longtext NOT NULL DEFAULT '',
PRIMARY KEY (`oid`,`att`),
KEY `oid` (`oid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin
Wie zu sehen ist hat die Tabelle lediglich 3 Felder. Das ermöglicht Objekte mit beliebig vielen Eigenschafen als Attribut => Value
Paare. Mit der für das Feld oid
(Object-ID) gesetzten Collation wird ebendieses Feld case-sensitive.
use lib qw(
/var/www/vhosts/rolfrost.de/files/fwlib
);
# Objekte in/aus MySQL
# oid => { att => val }
# Tabelle objects
package Objects;
use strict;
use warnings;
use Factory;
use Tie::Hash;
use base ('Tie::StdHash');
my $OID; # Object ID
my $DBH; # MySQL Handle
sub TIEHASH{
my $class = shift;
$OID = shift;
return eval{
my $factory = Factory->new;
$DBH = $factory->dbh;
my $r = $DBH->selectall_arrayref("select * from objects where oid=?", {Slice=>{}}, $OID);
my %self = scalar @$r ? map{ $_->{att}, $_->{val} } @$r : ();
bless \%self, $class;
}
}
sub write{
my $self = shift;
my $sth = $DBH->prepare_cached(qq(
insert into objects (oid,att,val)values(?,?,?)
));
$DBH->do("delete from objects where oid=?",{},$OID);
foreach my $att(keys %$self){
$sth->execute($OID,$att,$self->{$att});
}
}
sub drop{
my $self = shift;
%$self = ();
$DBH->do("delete from objects where oid=?",{},$OID);
}
sub merge{
my $self = shift;
my %in = @_;
%$self = (%$self, %in);
}
sub delete{
my $self = shift;
delete $self->{$_} for @_;
}
1;#########################################################################
__END__
package main;
use strict;
use warnings;
use Data::Dumper;
tie my %ussd, 'Objects', 'ussd' or die $@;
print Dumper \%ussd;
Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. sos@rolfrost.de. Entity: 3b07dab8c53efe0a5e3d391465db89b6