I've been watching this conversation without comment for the past few days but I feel pulled into action. Basically, I am starting to wonder about things like Class::DBI and RDBO which require you to remodel what you already modelled in the database schema.

More and more, I am attracted to things which only do their task and don't force me to redo a task already done. One such thing is Alzabo. Another such thing is DBIx::Simple by Juerd Waalboer.

On 10/25/05, Sean Davis <[EMAIL PROTECTED]> wrote:
Using RDBO 0.78.  Schema, class definitions, and class definitions are
below.  I get the following errors in executing the test code.  Sorry to
post so many questions in such a short period of time.

No Rose::DB::Object-derived class found for catalog '' schema 'public' table
'g_main' at /Library/Perl/5.8.6/Rose/DB/Object/Metadata/Auto.pm line 402.
No Rose::DB::Object-derived class found for catalog '' schema 'public' table
'ug_main' at /Library/Perl/5.8.6/Rose/DB/Object/Metadata/Auto.pm line 402.
Use of uninitialized value in join or string at rosetest.pl line 21.
Can't locate object method "unigenes" via package
"AnnoDB::Model::Gene::Main"

Methods for the following relationships and foreign keys were deferred and
then never actually created.

TYPE            NAME
----            ----
Relationship    unigenes

at /Library/Perl/5.8.6/Rose/DB/Object.pm line 1054
    Rose::DB::Object::AUTOLOAD('AnnoDB::Model::Gene::Main=HASH(0x18014ac)')
called at rosetest.pl line 24
7778    ZNFP1

Thanks for any insight.

Sean




create table ug_main (
    ug_id varchar primary key not null,
    species varchar,
    symbol varchar,
    description varchar,
    cytoband varchar,
    scount integer,
    homol varchar,
    rest_expr varchar,
    mgi varchar
) without OIDS;

create table g_main (
    tax_id integer,
    gene_id integer primary key,
    symbol varchar,
    locustag varchar,
    chromosome varchar,
    map_location varchar,
    description varchar,
    gene_type varchar,
    symbol_from_nomenclature_auth varchar,
    full_name_from_nomenclature_auth varchar,
    nomenclature_status varchar,
    discontinued boolean default false,
    new_gene_id integer default NULL
) without OIDS;

create table g_ug (
    g_ug_id serial primary key,
    gene_id integer references g_main(gene_id) on update cascade on delete
cascade deferrable,
    ug_id varchar references ug_main(ug_id) on update cascade on delete
cascade deferrable
) without OIDS;


Rose::DB::Object Class definitions

package AnnoDB::Model::Gene::Main;
use AnnoDB::Model::Gene2Unigene;

use base qw(AnnoDB::Model);

__PACKAGE__->meta->table('g_main');

__PACKAGE__->meta->relationships
  (
   unigenes =>
   {
    type => 'many to many',
    map_class => 'AnnoDB::Model::Gene2Unigene'
   },
  );
__PACKAGE__->meta->auto_initialize();

package AnnoDB::Model::Gene::Main::Manager;
use Rose::DB::Object::Manager;
our @ISA = qw(Rose::DB::Object::Manager);

sub object_class{'AnnoDB::Model::Gene::Main'};

__PACKAGE__->make_manager_methods('gmain');

1;


package AnnoDB::Model::Unigene::Main;
use AnnoDB::Model::Gene2Unigene;

use base qw(AnnoDB::Model);

__PACKAGE__->meta->table('ug_main');

__PACKAGE__->meta->relationships
  (
   genes =>
   {
    type => 'many to many',
    map_class => 'AnnoDB::Model::Gene2Unigene'
   },
  );

package AnnoDB::Model::Unigene::Main::Manager;
use Rose::DB::Object::Manager;
our @ISA = qw(Rose::DB::Object::Manager);

sub object_class{'AnnoDB::Model::Unigene::Main'};

__PACKAGE__->make_manager_methods('ugmain');

1;

package AnnoDB::Model::Gene2Unigene;
use AnnoDB::Model::Gene::Main;
use AnnoDB::Model::Unigene::Main;

use base qw(AnnoDB::Model);

__PACKAGE__->meta->table('g_ug');
__PACKAGE__->meta->auto_initialize();


package AnnoDB::Model::Gene2Unigene::Manager;
use Rose::DB::Object::Manager;
our @ISA = qw(Rose::DB::Object::Manager);

sub object_class{'AnnoDB::Model::Gene2Unigene'};

__PACKAGE__->make_manager_methods('gug');

1;


And finally some test code:

#!/usr/bin/perl
use strict;
use lib './lib';
use AnnoDB::Model::Gene::Main;
use AnnoDB::Model::Gene::Alias;
use AnnoDB::Model::Gene::Sts;
use AnnoDB::Model::Gene::Refseq;
use AnnoDB::Model::Gene::Refprot;
use AnnoDB::Model::Unigene::Main;
use AnnoDB::Model::Gene::Pubmed;

my $genes = AnnoDB::Model::Gene::Main::Manager->get_gmain_iterator
  (
   query=>[
       symbol => {like => 'ZNF%'},
       tax_id => 9606,
      ],
   sort_by => 't1.tax_id');

while (my $gene = $genes->next) {
  print join("\t",$gene->gene_id,
         $gene->symbol,
         $gene->description)."\n";
  foreach ($gene->unigenes) {
    print "     Unigene:".$_->ug_id."\n";
  }
}

print "";





-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.
Get Certified Today * Register for a JBoss Training Course
Free Certification Exam for All Training Attendees Through End of 2005
Visit http://www.jboss.com/services/certification for more information
_______________________________________________
Rose-db-object mailing list
Rose-db-object@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rose-db-object

Reply via email to