Bio::Genex::TreatmentLevel - Methods for processing data from the GeneX DB table: TreatmentLevel
use Bio::Genex::TreatmentLevel;
# instantiating an instance my $TreatmentLevel = Bio::Genex::TreatmentLevel->new(id=>47);
# retrieve data from the DB for all columns $TreatmentLevel->fetch();
# creating an instance, without pre-fetching all columns my $TreatmentLevel = new Bio::Genex::TreatmentLevel(id=>47);
# creating an instance with pre-fetched data my $TreatmentLevel = new Bio::Genex::TreatmentLevel(id=>47, 'fetch_all'=>1);
# retrieving multiple instances via primary keys my @objects = Bio::Genex::TreatmentLevel->get_objects(23,57,98)
# retrieving all instances from a table my @objects = Bio::Genex::TreatmentLevel->get_objects('ALL');
# retrieving the primary key for an object, generically my $primary_key = $TreatmentLevel->id();
# or specifically my $tl_pk_val = $TreatmentLevel->tl_pk();
# retreving other DB column attributes my $es_fk_val = $TreatmentLevel->es_fk(); $TreatmentLevel->es_fk($value);
my $ratio_am_fk_val = $TreatmentLevel->ratio_am_fk(); $TreatmentLevel->ratio_am_fk($value);
my $name_val = $TreatmentLevel->name(); $TreatmentLevel->name($value);
Each Genex class has a one to one correspondence with a GeneX DB table of the same name (i.e. the corresponding table for Bio::Genex::TreatmentLevel is TreatmentLevel).
Most applications will first create an instance of Bio::Genex::TreatmentLevel
and then fetch the data for the object from the DB by invoking
fetch()
. However, in cases where you may only be accessing a single
value from an object the built-in delayed fetch
mechanism can be used. All objects are created without pre-fetching
any data from the DB. Whenever an attribute of the object is accessed
via a getter method, the data for that attribute will be fetched from
the DB if it has not already been. Delayed fetching happens
transparently without the user needing to enable or disable any
features.
Since data is not be fetched from the DB until it is accessed by the calling application, it could presumably save a lot of access time for large complicated objects when only a few attribute values are needed.
There are three different types of attributes which instances of Bio::Genex::TreatmentLevel can access: raw foreign key attributes, Obect-Oriented foreign key attributes, and simple column attributes.
Specifying the 'recursive_fetch
' parameter when calling new()
,
modifies the behavior of this mode. The value given specifies the
number of levels deep that fetch will be invoked on sub-objects
created.
Class Bio::Genex::TreatmentLevel defines the following utility variables for assisting programmers to access the TreatmentLevel table.
get_objects()
or any call to a ONE_TO_MANY
or LOOKUP_TABLE
foreign key
accessor method).
new()
. Objects are cached by primary key. The
caching is very simple, and no effort is made to track whether
different invocations of new()
are being made for an object with
the same primary key value, but with different options set. If you
desire to reinstantiate an object with a different set of parameters,
you would need to undefine $USE_CACHE
first.
WARNING: variables other than those listed here are for internal use only and are subject to change without notice. Use them at your own risk.
It is possible to retrieve only the subset of attributes one chooses
by simply creating an object instance and then calling the appropriate
getter function. The object will automatically fetch the value from
the DB when requested. This can potentially save time for large
complicated objects. This triggers a separate DB query for each
attribute that is accessed, whereas calling fetch()
will retrieve
all fields of the object with a single query.
For example:
my $TreatmentLevel = Bio::Genex::TreatmentLevel->new(id=>47); my $val = $TreatmentLevel->tl_pk();
The attribute's value is then cached in the object so any further calls to that attribute's getter method do not trigger a DB query.
NOTE: Methods may still return undef
if their value in
the DB is NULL
.
The following methods can all be called without first having an
instance of the class via the Bio::Genex::TreatmentLevel->methodname()
syntax.
new(%args)
new()
accepts the following arguments:
linking_table()
pkey_name()
table_name()
column2name()
name2column()
%column2name = %{$class->column2name()}; if (exists $column2name{$_}) { push(@column_copy,$column2name{$_}); }
# now that we've translated the names, we sort them @column_copy = sort @column_copy;
# make a header element. push(@rows,th(\@column_copy));
fkeys()
column_names()
# first retrieve the data from the DB $object = $full_module_name->new(id=>$id); $object->fetch();
# now extract the data from the object foreach (@{$class->column_names}) { # we use this to temporarily relax the strict pragma # to use symbolic references no strict 'refs'; $tmp_values{$_} = $object->$_;
# back to our regularily scheduled strictness }
insert_db($dbh)
new()
, set the attributes that you want, and then call
insert_db()
.
my $dbh = Bio::Genex::current_connection(USER=>$SU_USERNAME, PASSWORD=>$SU_PASSWORD); my TreatmentLevel = Bio::Genex::TreatmentLevel->new(); TreatmentLevel->es_fk('some_value'); TreatmentLevel->insert_db($dbh);
NOTE: You must log into the DB with a user/password that has INSERT priveleges in the DB, otherwise you will get a DBI error.
WARNING: fetch()
will not be called, so if you are using this
method to insert a copy of an existing DB object, then it is up to you
to call fetch()
, otherwise, only the attributes that are currently
set in the object will be inserted.
update_db($dbh)
update_db()
.
my $dbh = Bio::Genex::current_connection(USER=>$SU_USERNAME, PASSWORD=>$SU_PASSWORD); my TreatmentLevel = Bio::Genex::TreatmentLevel->new(id=>43); TreatmentLevel->es_fk('some_value'); TreatmentLevel->update_db($dbh);
NOTE: You must log into the DB with a user/password that has INSERT priveleges in the DB, otherwise you will get a DBI error.
NOTE: Any modification of the primary key value will be discarded ('tl_pk' for module Bio::Genex::TreatmentLevel).
get_objects(@id_list)
get_objects('ALL')
By passing in an @id_list
, get_objects()
uses each element of the
list as a primary key for the TreatmentLevel table and returns a single
instance for each entry.
WARNING: Passing incorrect id values to get_objects()
will cause
a warning from Bio::Genex::TreatmentLevel::initialize()
. Objects will be
created for other correct id values in the list.
By passing the 'ALL' parameter, get_objects()
returns an instance
for every entry in the table.
By passing an anonymous hash reference that contains the 'column' and 'name' keys, the method will return all objects from the DB whose that have the specified value in the specified column.
NOTE: All objects must have the 'id' parameter set before attempting
to use fetch()
or any of the objects getter functions.
The following methods can only be called by first having valid instance of class Bio::Genex::TreatmentLevel.
fetch()
WARNING: methods other than those listed here are for internal use only and are subject to change without notice. Use them at your own risk.
There are two major categories of foreign key accessor methods: Object Oriented foreign key methods, and raw foreign key methods.
Each foreign key column in the table is represented by two methods, one OO method and one raw method. The raw method enables fethcing the exact numeric or string values stored in the DB. The OO method creates objects of the class the fkey column refers to. The idea is that if only the numeric fkey value is desired, the raw fkey method can be used. If it is necessary to get attributes from the table referred to by the fkey column, then the OO method should be invoked, and the necessary methods on that object can be queried.
The names of the raw fkey methods is the same as the fkey columns in the DB table they represent (all fkey columns end in the suffix '_fk'). The OO methods have the same names as the column they represent, with the difference that they have the suffix '_obj' instead of '_fk'.
So for example, in class Bio::Genex::ArrayMeasurement the
'primary_es_fk
' column is represented by two methods, the raw
method primary_es_fk()
, and the OO method primary_es_obj
.
The following foreign key accessors are defined for class Bio::Genex::TreatmentLevel:
treatment_ams_fk()
treatment_ams_obj()
treatment_ams_fk()
returns a list of
foreign key ids. The OO accessor method, treatment_ams_obj()
returns a
list of objects of class Bio::Genex::Treatment_AMs.
tl_factorvalues_fk()
tl_factorvalues_obj()
tl_factorvalues_fk()
returns a list of
foreign key ids. The OO accessor method, tl_factorvalues_obj()
returns a
list of objects of class Bio::Genex::TL_FactorValues.
Every foreign key in a DB table belongs to a certain class of foreign keys. Each type of foreign key confers a different behavior on the class that contains it. The classifications used in Genex.pm are:
If a class contains a foreign key of this type it will not be visible to the API of that class, but instead it confers a special method to the class that it references.
For example, the Chromosome table has a MANY_TO_ONE foreign key,
spc_fk, that refers to the species table. Class the Bio::Genex::Chromosome manpage, has
it\'s normal spc_fk()
attribute method, but no special foreign key
accessor method. However, class the Bio::Genex::Species manpage is given a special
foreign key accessor method, chromosome_fk()
of type
ONE_TO_MANY. When invoked, this method returns a list of objects of
class the Bio::Genex::Species manpage.
The inverse of type MANY_TO_ONE. It is not an attribute inherent to a given foreign key in any DB table, but instead is created by the existence of a MANY_TO_ONE foreign key in another table. See the above discussion about MANY_TO_ONE foreign keys.
This type of key is similar to type ONE_TO_MANY. However, However the
API will never retrieve an object of this type. Instead it
retrieves a matrix of values, that represent the list of objects. It
is used in only two places in the API: the Bio::Genex::ArrayMeasurement manpage and
the Bio::Genex::ArrayLayout manpage classes with the am_spots()
and al_spots()
accessor functions.
Foreign keys of this type appear in tables without primary keys. The foreign keys are each of type LINKING_TABLE, and when invoked return an object of the class referred to by the foreign key.
A generic foreign key with no special properties. When invoked it returns an object of the class referred to by the foreign key.
These are the setter and getter methods for attributes in class Bio::Genex::TreatmentLevel.
NOTE: To use the getter methods, you may either invoke the
fetch()
method to retrieve all the values for an object, or else
rely on delayed fetching to retrieve the attributes
as needed.
id()
id()
is a special attribute method that is common to all the Genex
classes. This method returns the primary key of the given instance
(and for class Bio::Genex::TreatmentLevel it is synonomous with the
tl_pk()
method). The id()
method can be useful in writing
generic methods because it avoids having to know the name of the
primary key column.
tl_pk()
WARNING: methods other than those listed here are for internal use only and are subject to change without notice. Use them at your own risk.
These classes are automatically generated by the
create_genex_classes.pl script. Each class is a subclass of the
Class::ObjectTemplate::DB class (which is in turn a subclass of
Class::ObjectTemplate written by Sriram Srinivasan, described in
Advanced Perl Programming, and modified by Jason
Stewart). ObjectTemplate implements automatic class creation in perl
(there exist other options such as Class::Struct
and
Class::MethodMaker
by Damian Conway) via an attributes()
method
call at class creation time.
Please send bug reports to genex@ncgr.org
on Tue Jan 23 22:53:39 2001 by /home/jasons/work/GeneX-WWW-Installer/Genex/scripts/create_genex_class.pl --dir=/home/jasons/work/GeneX-WWW-Installer/Genex --target=TreatmentLevel --support=TL_FactorValues --support=Treatment_AMs
Jason E. Stewart (jes@ncgr.org)
perl(1).