Hi 2 all. I'm trying to wrap into OOP form some chunks of my code. I mean to make a module that will be able to perform different complex operations MySQL DB (based on custom logics) and return data in a simple form (hash or scalar). For example something like:
1. FetchDataset($label_id,$role_id,'dataset') should return a hash where key\value pares will be created from table column names\values returned by query.
2. GetValue('log_file') will check if "dataset" exists and in case of success will return this value.
So this where I got stuck. I'm not sure if I understand how to store data returned from a DB without pre defined keys in "$self" reference like
$self = {label_id => shift, role_id => shift,....} which is not to good for me because I'm trying to make this module to be able to retrieve data from different tables.
#!/usr/bin/perl -w
package Conf;
use DBI;
my $dbh = DBI->connect("DBI:mysql:database=framework;host=192.168.1.1;
+port=3306;", "test", "test", {'RaiseError' => 1});
sub new {
$class = shift;
my $self = {};
die "ERROR: Connection to DB failed.Dying." if !$dbh;
bless $self, $class;
return $self;
}
sub FetchDataset {
my ( $self,$label_id,$role_id,$data_type ) = @_;
print "$self\n";
print "$label_id\n";
print "$role_id\n";
print "$data_type\n";
if ($data_type eq "dataset") {
$sth = $dbh->prepare(qq{ SELECT `cfg_role_attrs`.`attr
+_key` , `cfg_datasets`.`attr_value` FROM `cfg_datasets` LEFT JOIN `c
+fg_role_attrs` ON `cfg_datasets`.`attr_id` = `cfg_role_attrs`.`attr_i
+d`
WHERE `cfg_datasets`.`role_id` = $role_id});
$rv = $sth->execute();
if (!$rv) {
die "Building 'global' dataset for: |$label_i
+d - $role_id : FAILED\n";
}
$self = $sth->fetchrow_hashref();
return $self;
}
}
sub GetValue {
my ($key) = @_;
return $self->{$key};
}
1;
And this is example how I'm planning to use it:
#!/usr/bin/perl -w
use warnings;
use strict;
use Conf;
my $object = Conf->new();
my $d_set = $object->FetchDataset('1','1','dataset');
my $value = $object->GetValue('log_file');
print "Coresponding value is : $value\n";
Thanks in advance for any help.