...
The variable value is completely flexible. It can be a simple integer or a complex data structure. This is accomplished by serializing the value before saving it to the database. YAML will be is used to serialize the data. YAML is a human friendly data serialization standard for all programming languages (http://yaml.org/). YAML modules are available for Perl, PHP, and many other languages:
Because the data is serialized into a highly compatible format, the backend and frontend can utilize common variables. It will be easy for the frontend to provide a means to configure variables by capturing the data entered into a web page and , constructing a data structure, serializing it via a PHP YAML module, and then saving the data structure in the variable table. The backend can then access the identical data structure using a Perl YAML module to deserialize the data.
The variable table will be table is utilized by backend code via functions provided by the DataStructure.pm module:
...
The variable table will have has the following columns:
...
id | name | value | setby | timestamp | type |
---|---|---|---|---|---|
smallint(5) | varchar(128) | longtext | varchar(40) | timestamp |
Code Block |
---|
CREATE TABLE IF NOT EXISTS `variable` ( `id` smallint(5) unsigned NOT NULL auto_increment, `name` varchar(128) NOT NULL default '', `value` longtext NOT NULL, `setby` varchar(40128) default NULL, `timestamp` timestampdatetime NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB InnoDB DEFAULT CHARSET=utf8latin1 AUTO_INCREMENT=1 ; |
...
Code Block |
---|
my %kms_configuration = ( '3'"ECU" => '"192.168.22.33:1688'", '1'"NCSU" => '"kms-server.ncsu.edu'", ); my $serialized_data = YAML::Dump(\%kms_configuration); $self->data->set_variable('"kms-configuration'", $serialized\%kms_dataconfiguration); |
The keys represent affiliation IDs and the correspond to the affiliation.name column in the database. The values represent the addresses (phony) of Windows Vista/2008 KMS activation servers.
This hash is serialized by DataStructure.pm::set_variable() using the YAML module's Dump function which transforms the hash into:
Code Block |
---|
--- 3ECU: 192.168.22.33:1688 1NCSU: kms-server.ncsu.edu |
The following row is saved in the variable table by the DataStructure.pm::set_variable() subroutine:
id | name | value | setby | timestamp |
---|---|---|---|---|
2 | kms-configuration | --- | new.pm:139 | 2009-05-26 11:35:36 |
To retrieve the data:
Code Block |
---|
my $kms_configuration = $self->data->get_variable("kms-configuration");
my $kms_address = $kms_configuration->{$affiliation_id};
|
A more elaborate data structure is created in Perl containing an array of hashes. One of the hash values (email) can be multivalued because the value is an anonymous array:
Code Block |
---|
my @contacts = ( { '"firstname'" => '"Joe'", '"lastname'" => '"Doe'", '"email'" => ['"joe@somewhere.org'", '"jdoe22@unity.ncsu.edu'"], '"employee_id'" => 3342 }, { '"firstname'" => '"Jane'", '"lastname'" => '"Doe'", '"email'" => ['"jane@somewhere.org'"], '"employee_id'" => 7865 } ); my $serialized_data = YAML::Dump(\@contacts); $self->data->set_variable('"contacts'", $serialized_data\@contacts); |
DataStructure.pm::set_variable() uses YAML::Dump transforms to transform this data structure into:
...
id | name | value | setby | timestamp |
---|---|---|---|---|
3 | contacts | --- | DataStructure.pm:554 | 2009-05-26 12:35:36 |
To retrieve the data:
Code Block |
---|
my @returned_contacts = @{$self->data->get_variable('contacts')};
for my $contact (@returned_contacts) {
print "Name: $contact->{firstname} $contact->{lastname}\n";
for my $email_address (@{$contact->{email}}) {
print "Email: $email_address\n";
}
print "---\n";
}
|