NAME

Bio::DB::Persistent::PersistentObject - makes a given object persistent

SYNOPSIS

# obtain a PersistentObject somehow, e.g.
$pobj = $dbadaptor->create_persistent("Bio::Seq");

# manipulate and query as if it were the wrapped object itself
print $pobj->isa("Bio::PrimarySeqI"), "\n";
$pobj->display_id("O238356");
$pobj->seq("ATCATCGACTGACAGGCAGTATCGACTAGCA");
$fea = Bio::SeqFeature::Generic->new(-start => 3, -end => 15);
$fea->attach_seq($pobj);
# and so on and so forth

# and, finally, or whenever suitable, make it persistent in the datastore
$pobj->create();
# change it
$pobj->desc("not a useful description");
# and update it in the datastore
$pobj->store();

# you may also want it to disappear
$pobj->remove();

DESCRIPTION

This class takes any Bioperl object for which an adaptor exists for a certain datastore and makes it implement Bio::DB::PersistentObjectI.

There is one single caveat though. The wrapped object must not use any of the method names defined in Bio::DB::PersistentObjectI, nor obj() or adaptor(). If it does, calls of these methods will never get routed to the wrapped object.

FEEDBACK

Mailing Lists

User feedback is an integral part of the evolution of this and other Bioperl modules. Send your comments and suggestions preferably to the Bioperl mailing list. Your participation is much appreciated.

bioperl-l@bioperl.org                  - General discussion
http://bioperl.org/wiki/Mailing_lists  - About the mailing lists

Support

Please direct usage questions or support issues to the mailing list:

bioperl-l@bioperl.org

rather than to the module maintainer directly. Many experienced and reponsive experts will be able look at the problem and quickly address it. Please include a thorough description of the problem with code and data examples if at all possible.

Reporting Bugs

Report bugs to the Bioperl bug tracking system to help us keep track of the bugs and their resolution. Bug reports can be submitted via the web:

http://redmine.open-bio.org/projects/bioperl/

AUTHOR - Hilmar Lapp

Email hlapp at gmx.net

Describe contact details here

CONTRIBUTORS

Additional contributors names and emails here

APPENDIX

The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _

new

Title   : new
Usage   : my $obj = Bio::DB::Persistent::PersistentObject->new();
Function: Builds a new Bio::DB::Persistent::PersistentObject object 
Returns : an instance of Bio::DB::Persistent::PersistentObject
Args    : -object => $obj_to_be_wrapped (mandatory)
          -adaptor => $adaptor_for_obj (optional, may be set later)

create

Title   : create
Usage   : $obj->create()
Function: Creates the object as a persistent object in the datastore. This
          is equivalent to an insert.

          Note that you will be able to retrieve the primary key at any time
          by calling primary_key() on the object.
Example :
Returns : The newly assigned primary key.
Args    : Optionally, additional named parameters. A common parameter will
          be -fkobjs, with a reference to an array of foreign key objects
          that are not retrievable from the persistent object itself.

store

Title   : store
Usage   : $obj->store()
Function: Updates the persistent object in the datastore to reflect its
          attribute values.
Example :
Returns : TRUE on success and FALSE otherwise
Args    : Optionally, additional named parameters. A common parameter will
          be -fkobjs, with a reference to an array of foreign key objects
          that are not retrievable from the persistent object itself.

remove

Title   : remove
Usage   : $obj->remove()
Function: Removes the persistent object from the datastore.
Example :
Returns : TRUE on success and FALSE otherwise
Args    : none

primary_key

Title   : primary_key
Usage   : $obj->primary_key($newval)
Function: Get the primary key of the persistent object in the datastore.

          Note that this implementation does not permit changing the
          primary key once it has been set. This is for sanity
          reasons, and may or may not be relaxed in the future. The
          only exception is changing it to undef.

Example : 
Returns : value of primary_key (a scalar)
Args    : new value (a scalar, optional)

obj

Title   : obj
Usage   : $obj->obj()
Function: Get/set the object that is made persistent through this adaptor.

          Note that this implementation does not allow to change the
          value once it has been set. This is for sanity reasons, and
          may or may not be relaxed in the future.

Example : 
Returns : The object made persistent through this adaptor
Args    : On set, the new value. Read above for caveat.

adaptor

Title   : adaptor
Usage   : $obj->adaptor($newval)
Function: Get/set of the PersistenceAdaptorI compliant object that actually
          implements persistence for this object
Example : 
Returns : A Bio::DB::PersistenceAdaptorI compliant object
Args    : Optionally, on set a Bio::DB::PersistenceAdaptorI compliant object

is_dirty

Title   : is_dirty
Usage   : $obj->is_dirty($newval)
Function: Get/set whether this persistent object is to be considered
          dirty.

          An object is considered dirty if one or more of it's
          properties has been altered since it was last obtained
          from, stored in, or created in the database, or if the
          create() (insert) or the last store() (update) hasn't been
          committed or rolled back yet.

          There are currently 3 known states of this attribute. A
          value of zero (or false) means the object has not been
          modified since it either came from the database, or since
          the changes have been serialized (via store()) and
          committed (via commit()). A negative value means changes
          have been serialized, but not yet committed. A positive
          value means there have been unserialized changes on the
          object.

Example : 
Returns : value of is_dirty (a scalar)
Args    : on set, new value (a scalar or undef, optional)

Methods for transactional control

Rollback and commit

commit

Title   : commit
Usage   :
Function: Commits the current transaction, if the underlying driver
          supports transactions.
Example :
Returns : TRUE
Args    : none

rollback

Title   : rollback
Usage   :
Function: Triggers a rollback of the current transaction, if the
          underlying driver supports transactions.
Example :
Returns : TRUE
Args    : none

Methods to mimic the wrapped object

isa

Title   : isa
Usage   :
Function: This is a standard perl object method. We override it here in order
          to generically claim we implement everything that the wrapped
          object does.
Example :
Returns : TRUE if this object is an instance of the given class, or inherits
          from the given class, and FALSE otherwise
Args    : the class to query for (a scalar string)

can

Title   : can
Usage   :
Function: This is a standard perl object method. We override it here in order
          to generically claim we 'can' everything that the wrapped
          object does.
Example :
Returns : TRUE if this object is has the named method, and FALSE otherwise
Args    : the method to query for (a scalar string)

Implementation of the decorating methods

See Bio::DB::PersistentObjectI for further documentation of the methods.

rank

Title   : rank
Usage   : $obj->rank($newval)
Function: Get/set the rank of this persistent object in a 1:n or n:n
          relationship.

Example : 
Returns : value of rank (a scalar)
Args    : new value (a scalar or undef, optional)

foreign_key_slot

Title   : foreign_key_slot
Usage   : $obj->foreign_key_slot($newval)
Function: Get/set of the slot name that is referring to this persistent
          object as a foreign key.

Example : 
Returns : value of foreign_key_slot (a scalar)
Args    : new value (a scalar or undef, optional)