From 01d230ecb932651d5300f5aabb85237aaf385140 Mon Sep 17 00:00:00 2001 From: Glenn Proctor <gp1@sanger.ac.uk> Date: Wed, 15 Dec 2004 12:01:33 +0000 Subject: [PATCH] Added support for uploading generated xrefs etc directly. --- .../xref_mapping/XrefMapper/BasicMapper.pm | 82 ++++++++++++++++--- 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/misc-scripts/xref_mapping/XrefMapper/BasicMapper.pm b/misc-scripts/xref_mapping/XrefMapper/BasicMapper.pm index 02ef511e58..f3bed84d2d 100644 --- a/misc-scripts/xref_mapping/XrefMapper/BasicMapper.pm +++ b/misc-scripts/xref_mapping/XrefMapper/BasicMapper.pm @@ -1,6 +1,7 @@ package XrefMapper::BasicMapper; use strict; +use Cwd; use DBI; use File::Basename; use IPC::Open3; @@ -389,12 +390,12 @@ sub fetch_and_dump_seq{ my ($self) = @_; my $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(-species => $self->species(), - -dbname => $self->dbname(), - -host => $self->host(), - -port => $self->port(), - -password => $self->password(), - -user => $self->user(), - -group => 'core'); + -dbname => $self->dbname(), + -host => $self->host(), + -port => $self->port(), + -pass => $self->password(), + -user => $self->user(), + -group => 'core'); # # store ensembl dna file name and open it @@ -701,7 +702,7 @@ sub parse_mappings { my $row = @{$self->dbi()->selectall_arrayref("SELECT MAX(object_xref_id) FROM object_xref")}[0]; my $max_object_xref_id = @{$row}[0]; if (!defined $max_object_xref_id) { - print "Can't get highest existing object_xref_id, using 1\n)"; + print "Can't get highest existing object_xref_id, using 1\n"; } else { print "Maximum existing object_xref_id = $max_object_xref_id\n"; $max_object_xref_id = 1; @@ -976,7 +977,7 @@ sub dump_core_xrefs { # create an object_xref linking this (dependent) xref with any objects it maps to # write to file and add to object_xref_mappings - if (defined $xref_to_objects{$master_xref_id}) { # XXX check + if (defined $xref_to_objects{$master_xref_id}) { # XXX check my @ensembl_object_ids = keys( %{$xref_to_objects{$master_xref_id}} ); # XXX check #print "xref $accession has " . scalar(@ensembl_object_ids) . " associated ensembl objects\n"; foreach my $object_id (@ensembl_object_ids) { @@ -1169,9 +1170,9 @@ sub build_gene_display_xrefs { -dbname => $self->dbname(), -host => $self->host(), -port => $self->port(), - -password => $self->password(), - -user => $self->user(), - -group => 'core'); + -pass => $self->password(), + -user => $self->user(), + -group => 'core'); my $ta = $db->get_TranscriptAdaptor(); print "Building gene display_xrefs\n"; @@ -1318,4 +1319,63 @@ sub map_source_to_external_db { return %source_to_external_db; } +# Upload .txt files and execute .sql files. + +sub do_upload { + + my ($self, $deleteexisting) = @_; + + # xref.txt etc + + # TODO warn if table not empty + + foreach my $table ("xref", "object_xref", "identity_xref", "external_synonym") { + + my $file = getcwd() . "/" . $table . ".txt"; + my $sth; + + if ($deleteexisting) { + + $sth = $self->dbi()->prepare("DELETE FROM $table"); + print "Deleting existing data in $table\n"; + $sth->execute(); + + } + + # don't seem to be able to use prepared statements here + $sth = $self->dbi()->prepare("LOAD DATA INFILE \'$file\' INTO TABLE $table"); + print "Uploading data in $file to $table\n"; + $sth->execute(); + + } + + # gene_display_xref.sql etc + foreach my $table ("gene", "transcript") { + + my $file = getcwd() . "/" . $table . "_display_xref.sql"; + my $sth; + + if ($deleteexisting) { + + $sth = $self->dbi()->prepare("UPDATE $table SET display_xref_id=NULL"); + print "Setting all existing display_xref_id in $table to NULL\n"; + $sth->execute(); + + } + + # is this nicer than using the mysql client? + open(DISPLAY_XREF, $file); + while(<DISPLAY_XREF>) { + + $sth = $self->dbi()->prepare($_); + print $_; + #$sth->execute(); + + } + + close(DISPLAY_XREF); + + } + +} 1; -- GitLab