// This method was a mess - tidied and rearranged IDType IntronSupportingEvidenceAdaptor_store(IntronSupportingEvidenceAdaptor *isea, IntronSupportingEvidence *sf) { if (sf == NULL) { fprintf(stderr,"sf is NULL in IntronSupportingEvidenceAdaptor_store\n"); exit(1); } Class_assertType(CLASS_INTRONSUPPORTINGEVIDENCE, sf->objectType); DBAdaptor *db = isea->dba; AnalysisAdaptor *analysisAdaptor = DBAdaptor_getAnalysisAdaptor(db); if (IntronSupportingEvidence_isStored(sf, db)) { fprintf(stderr,"ISE already stored\n"); return IntronSupportingEvidence_getDbID(sf); } Analysis *analysis = IntronSupportingEvidence_getAnalysis(sf); if (!Analysis_isStored(analysis, db)) { AnalysisAdaptor_store(analysisAdaptor, analysis); } IDType analysisId = Analysis_getDbID(analysis); // Think the above is equivalent to this horror //my $analysis_id = $analysis->is_stored($db) ? $analysis->dbID() : $db->get_AnalysisAdaptor()->store($analysis); /* No transfer (see GeneAdaptor for why) my $seq_region_id; ($sf, $seq_region_id) = $self->_pre_store($sf); */ IDType seqRegionId = BaseFeatureAdaptor_preStore((BaseFeatureAdaptor *)isea, (SeqFeature*)sf); char qStr[1024]; sprintf(qStr, "INSERT IGNORE INTO intron_supporting_evidence " "(analysis_id, seq_region_id, seq_region_start, seq_region_end, seq_region_strand, hit_name, score, score_type, is_splice_canonical) " "VALUES ("IDFMTSTR","IDFMTSTR",%ld,%ld,%d,'%s',%f,'%s',%d)", analysisId, seqRegionId, IntronSupportingEvidence_getSeqRegionStart((SeqFeature*)sf), IntronSupportingEvidence_getSeqRegionEnd((SeqFeature*)sf), IntronSupportingEvidence_getSeqRegionStrand((SeqFeature*)sf), IntronSupportingEvidence_getHitName(sf), IntronSupportingEvidence_getScore(sf), IntronSupportingEvidence_getScoreType(sf), IntronSupportingEvidence_getIsSpliceCanonical(sf)); StatementHandle *sth = isea->prepare((BaseAdaptor *)isea,qStr,strlen(qStr)); sth->execute(sth); IDType sfId = sth->getInsertId(sth); sth->finish(sth); if (!sfId) { sprintf(qStr,"SELECT intron_supporting_evidence_id " "FROM intron_supporting_evidence " "WHERE analysis_id = "IDFMTSTR " AND seq_region_id = "IDFMTSTR " AND seq_region_start = %ld" " AND seq_region_end = %ld" " AND seq_region_strand = %d" " AND hit_name = '%s'", analysisId, seqRegionId, IntronSupportingEvidence_getSeqRegionStart((SeqFeature*)sf), IntronSupportingEvidence_getSeqRegionEnd((SeqFeature*)sf), IntronSupportingEvidence_getSeqRegionStrand((SeqFeature*)sf), IntronSupportingEvidence_getHitName(sf)); sth = isea->prepare((BaseAdaptor *)isea,qStr,strlen(qStr)); sth->execute(sth); if (sth->numRows(sth) > 0) { ResultRow *row = sth->fetchRow(sth); sfId = row->getLongLongAt(row, 0); } sth->finish(sth); } IntronSupportingEvidence_setAdaptor((SeqFeature*)sf, (BaseAdaptor*)isea); IntronSupportingEvidence_setDbID(sf, sfId); return IntronSupportingEvidence_getDbID(sf); }
int dumpGenes(Vector *genes, int withSupport) { FILE *fp = stderr; int i; int failed = 0; for (i=0;i<Vector_getNumElement(genes) && !failed;i++) { Gene *g = Vector_getElementAt(genes,i); fprintf(fp,"Gene %s (%s) coords: %ld %ld %d\n",Gene_getStableId(g),(Gene_getDisplayXref(g) ? DBEntry_getDisplayId(Gene_getDisplayXref(g)) : ""),Gene_getStart(g),Gene_getEnd(g),Gene_getStrand(g)); int j; for (j=0;j<Gene_getTranscriptCount(g);j++) { Transcript *t = Gene_getTranscriptAt(g,j); int k; fprintf(fp," Trans %s coords: %ld %ld %d biotype: %s\n",Transcript_getStableId(t), Transcript_getStart(t),Transcript_getEnd(t),Transcript_getStrand(t),Transcript_getBiotype(t)); if (withSupport) { Vector *support = Transcript_getAllSupportingFeatures(t); for (k=0; k<Vector_getNumElement(support); k++) { BaseAlignFeature *baf = Vector_getElementAt(support, k); fprintf(fp," support %s coords: %ld %ld %d\n", BaseAlignFeature_getHitSeqName(baf), BaseAlignFeature_getStart(baf), BaseAlignFeature_getEnd(baf), BaseAlignFeature_getStrand(baf)); } Vector *intronSupport = Transcript_getAllIntronSupportingEvidence(t); for (k=0; k<Vector_getNumElement(intronSupport); k++) { IntronSupportingEvidence *ise = Vector_getElementAt(intronSupport, k); fprintf(fp," intron support %s coords: %ld %ld %d\n", IntronSupportingEvidence_getHitName(ise), IntronSupportingEvidence_getStart(ise), IntronSupportingEvidence_getEnd(ise), IntronSupportingEvidence_getStrand(ise)); } } for (k=0;k<Transcript_getExonCount(t);k++) { Exon *e = Transcript_getExonAt(t,k); fprintf(fp," exon %s (%p) coords: %ld %ld %d\n",Exon_getStableId(e), e, Exon_getStart(e), Exon_getEnd(e), Exon_getStrand(e)); if (withSupport) { Vector *support = Exon_getAllSupportingFeatures(e); int m; for (m=0; m<Vector_getNumElement(support); m++) { BaseAlignFeature *baf = Vector_getElementAt(support, m); fprintf(fp," support %s coords: %ld %ld %d\n", BaseAlignFeature_getHitSeqName(baf), BaseAlignFeature_getStart(baf), BaseAlignFeature_getEnd(baf), BaseAlignFeature_getStrand(baf)); } } } Translation *tln = Transcript_getTranslation(t); if (tln) { fprintf(fp," translation id: %s %s %d %s %d\n",Translation_getStableId(tln), Exon_getStableId(Translation_getStartExon(tln)), Translation_getStart(tln), Exon_getStableId(Translation_getEndExon(tln)), Translation_getEnd(tln)); char *tSeq = Transcript_translate(t); fprintf(fp," translation: %s\n",tSeq); free(tSeq); Vector *tlnAttribs = Translation_getAllAttributes(tln, NULL); if (Vector_getNumElement(tlnAttribs)) { fprintf(fp, " translation attributes:\n"); int n; for (n=0; n<Vector_getNumElement(tlnAttribs); n++) { Attribute *attrib = Vector_getElementAt(tlnAttribs, n); fprintf(fp, " code %s name %s desc %s value %s\n", Attribute_getCode(attrib), Attribute_getName(attrib), Attribute_getDescription(attrib), Attribute_getValue(attrib)); } } } } } return failed; }