# $Id: genericdb.pm,v 1.2 2004/05/04 16:27:56 cmungall Exp $ # # This GO module is maintained by Chris Mungall # # see also - http://www.geneontology.org # - http://www.godatabase.org/dev # # You may distribute this module under the same terms as perl itself =head1 NAME GO::Handlers::genericdb - =head1 SYNOPSIS use GO::Handlers::genericdb =cut =head1 DESCRIPTION =head1 PUBLIC METHODS - =cut # makes objects from parser events package GO::Handlers::genericdb; use GO::SqlWrapper qw (:all); use base qw(GO::Handlers::base); use strict; use Carp; use Data::Dumper; use Data::Stag qw(:all); sub apph { my $self = shift; $self->{_apph} = shift if @_; return $self->{_apph}; } sub placeholder_h { my $self = shift; $self->{_placeholder_h} = shift if @_; return $self->{_placeholder_h}; } sub curr_acc { my $self = shift; $self->{_curr_acc} = shift if @_; return $self->{_curr_acc}; } sub rels { my $self = shift; $self->{_rels} = shift if @_; return $self->{_rels}; } sub init { my $self = shift; $self->SUPER::init(@_); if (!defined($self->strictorder)) { $self->strictorder(1); } $self->curr_acc(0); $self->placeholder_h({}); $self->rels([]); } sub id_h { my $self = shift; $self->{_id_h} = shift if @_; if (!$self->{_id_h}) { my $dbh = $self->apph->dbh; my $pairs = select_rowlist($dbh, "term", undef, "acc, id"); $self->{_id_h} = {map {@$_} @$pairs }; } return $self->{_id_h}; } sub g { my $self = shift; } # flattens tree to a hash; # only top level, not recursive sub hashify { my $tree = shift; return $tree if !ref($tree) || ref($tree) eq "HASH"; return {stag_pairs($tree)}; } sub insert { my $self = shift; my $dbh = $self->apph->dbh; insert_h($dbh, @_); } sub store { my $self = shift; my $tbl = shift; my $tree = shift; my $pk = shift; my $nostag_get = shift; my $dbh = $self->apph->dbh; my $selh = hashify($tree); foreach my $k (keys %$selh) { delete $selh->{$k} if !defined($selh->{$k}); } my $h; unless ($nostag_get) { $h = select_hash($dbh, $tbl, $selh); } my $id; if ($h) { if ($pk) { $id = $h->{$pk}; } } else { $id = insert_h($dbh, $tbl, $selh); } $id; } 1;