This page describes the variable table in the database. The purpose of this table is to allow pieces of data to be easily stored in the database without having to manipulate the schema. The need for such a table has grown over time as more and more features are added to VCL. This table will become very useful as VCL becomes increasingly modularized. This table will allow any VCL component to access the variable data without having to interact directly with the database.
A variable stored in this table can be thought just like any other programatic variable -- it has a unique name and value. The name can be any string and is chosen by the developer utilizing the table. Since the name must be unique and the variable table is shared by all facets of VCL (frontend, backend, modules), the developer should choose a name that isn't too general. It is advisable to include something like the module name in the variable name in order to prevent other components from overwriting the variable.
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 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.
The variable table will be utilized by backend code via functions provided by the DataStructure.pm module:
The variable table will have the following columns:
|
id |
name |
value |
setby |
timestamp |
---|---|---|---|---|---|
type |
smallint(5) |
varchar(128) |
longtext |
varchar(40) |
timestamp |
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(40) default NULL, `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
The following hash is created in Perl:
my %kms_configuration = ( '3' => '192.168.22.33:1688', '1' => 'kms-server.ncsu.edu', ); my $serialized_data = YAML::Dump(\%kms_configuration); $self->data->set_variable('kms-configuration', $serialized_data);
The keys represent affiliation IDs and the values represent the addresses (phony) of Windows Vista/2008 KMS activation servers.
This hash is serialized using the YAML module's Dump function, and then 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 |
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:
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);
YAML::Dump transforms this data structure into the value stored in the value column in the following row:
id |
name |
value |
setby |
timestamp |
---|---|---|---|---|
3 |
contacts |
--- |
DataStructure.pm:554 |
2009-05-26 12:35:36 |