Bio-Chado-Schema
view release on metacpan or search on metacpan
doc/slides/intro/Spork.slides view on Meta::CPAN
, features.uniquename
, features.residues
, features.seqlen
, features.md5checksum
, features.type_id
, features.is_analysis
, features.is_obsolete
, features.timeaccessioned
, features.timelastmodified
FROM organism me
LEFT JOIN feature features
ON features.organism_id = me.organism_id
JOIN cvterm type
ON type.cvterm_id = features.type_id
WHERE type.name = 'BAC_clone' AND species = 'Solanum tuberosum'
EOS
----
= BCS Usage: Loading
$chado->resultset( 'Cv::Cv' )
->find_or_create({ name => 'My Fake Ontology' })
->create_related( 'cvterm',
{ name => 'MyFakeTerm' });
makes the SQL:
SELECT me.cv_id
, me.name
, me.definition
FROM cv me
WHERE ( me.name = 'my fake ontology' )
INSERT INTO cv ( name )
VALUES ( ? )
----
= BCS Usage: Transactions
$chado->txn_do(sub {
$chado->resultset('Cv::Cv')
->find_or_create({ name => 'My Fake Ontology' })
->create_related( 'cvterm', { name => 'MyFakeTerm' } );
$chado->do_all_kinds_of_other_stuff;
});
----
= The Real Advantages of DBIC
* easier to manipulate and assemble queries
* Don't Repeat Yourself
----
= The Real Advantages of DBIC
* it's all objects. you can delegate to them, pass them around, etc.
* HOWEVER:
+** usually you don't want to subclass them
** but, see |DBIx::Class::Manual::Cookbook|
----
= The Real Advantages of DBIC
* complex joined queries (Chado queries) are very easy and compact
----
= The Real Advantages of DBIC
* SQL syntax errors are much more difficult to make
----
= Using DBIC with your own tables
* use |DBIx::Class::Schema::Loader| to dump a whole set
* make your own definitions
* your table: other_thing, foreign key feature_id to Chado feature table
package My::DBIC:::Layer::OtherThing;
use base 'DBIx::Class::Core';
__PACKAGE__->table('other_thing');
__PACKAGE__->add_columns(
'other_thing_id' => { ... },
'name' => { ... },
'definition' => { ... },
'feature_id' => { ... },
);
__PACKAGE__->set_primary_key('other_thing_id');
__PACKAGE__->add_unique_constraint('ot_c1', ['name']);
__PACKAGE__->belongs_to(
'feature',
'Bio::Chado::Schema::Sequence::Feature',
{ 'foreign.feature_id' => 'self.feature_id' },
);
----
= "Duct tape" your own schema onto BCS
* make an accessor 'other_things' that ties your own DBIC class to BCS
+ Bio::Chado::Schema::Sequence::Feature->has_many(
'other_things',
'My::DBIC::Layer::OtherThing',
{ 'foreign.feature_id' => 'self.feature_id' },
);
+* add it to the BCS schema dynamically
+ Bio::Chado::Schema->register_source('OtherThing', 'My::DBIC::Layer::OtherThing');
+* use it with the rest
+ $chado->resultset('Sequence::Feature')->other_things;
----
= Making a composite schema
package My::Schema;
# load our own classes
( run in 1.127 second using v1.01-cache-2.11-cpan-f56aa216473 )