static rc_t DB_Fini(const SParam* p, DB_Handle* h, bool drop) { rc_t rc = 0, rc2; /* THIS FUNCTION MAKES NO ATTEMPT TO PRESERVE INITIAL ERROR CODES EACH SUCCESSIVE ERROR OVERWRITES THE PREVIOUS CODE */ if( h != NULL ) { PLOGMSG(klogInfo, (klogInfo, "Fini SEQUENCE", "severity=status")); if( (rc2 = CGWriterSeq_Whack(h->wseq, !drop, NULL)) != 0 && !drop ) { drop = true; rc = rc2; } h->wseq = NULL; h->reads = NULL; PLOGMSG(klogInfo, (klogInfo, "Fini (PRI&SEC)_ALIGNMENT", "severity=status")); if( (rc2 = CGWriterAlgn_Whack(h->walgn, !drop, NULL, NULL)) != 0 && !drop ) { drop = true; rc = rc2; } h->walgn = NULL; h->mappings = NULL; PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_INTERVAL", "severity=status")); if( (rc2 = CGWriterEvdInt_Whack(h->wev_int, !drop, NULL)) != 0 && !drop ) { drop = true; rc = rc2; } h->wev_int = NULL; h->ev_int = NULL; PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_ALIGNMENT", "severity=status")); if( (rc2 = CGWriterEvdDnbs_Whack(h->wev_dnb, !drop, NULL)) != 0 && !drop ) { drop = true; rc = rc2; } h->wev_dnb = NULL; h->ev_dnb = NULL; PLOGMSG(klogInfo, (klogInfo, "Fini calculating reference coverage", "severity=status")); if( (rc2 = ReferenceMgr_Release(h->rmgr, !drop, NULL, drop ? false : true)) != 0 && !drop ) { drop = true; rc = rc2; LOGERR(klogErr, rc, "Failed calculating reference coverage"); } h->rmgr = NULL; if( rc == 0 ) { KMetadata* meta; if( (rc = VDatabaseOpenMetadataUpdate(h->db, &meta)) == 0 ) { KMDataNode *node; if( (rc = KMetadataOpenNodeUpdate(meta, &node, "/")) == 0 ) { if( (rc = KLoaderMeta_Write(node, p->argv0, __DATE__, "Complete Genomics", KAppVersion())) != 0 ) { LOGERR(klogErr, rc, "Cannot update loader meta"); } KMDataNodeRelease(node); } KMetadataRelease(meta); } } PLOGMSG(klogInfo, (klogInfo, "Fini VDatabaseRelease", "severity=status")); VDatabaseRelease(h->db); h->db = NULL; VSchemaRelease(h->schema); h->schema = NULL; if( drop || rc != 0 ) { rc2 = VDBManagerDrop(h->mgr, kptDatabase, p->out); if( GetRCState(rc2) == rcNotFound ) { /* WHAT WOULD BE THE POINT OF RESETTING "rc" TO ZERO? */ rc = 0; } else if( rc2 != 0 ) { if ( rc == 0 ) rc = rc2; PLOGERR(klogErr, (klogErr, rc2, "cannot drop db at '$(path)'", PLOG_S(path), p->out)); } } VDBManagerRelease(h->mgr); h->mgr = NULL; } return rc; }
rc_t CGWriterAlgn_Make(const CGWriterAlgn** cself, TMappingsData** data, VDatabase* db, const ReferenceMgr* rmgr, uint32_t min_mapq, bool single_mate, uint32_t cluster_size) { rc_t rc = 0; CGWriterAlgn* self; if( cself == NULL || db == NULL ) { return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull); } self = calloc(1, sizeof(*self)); if( self == NULL ) { rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted); } else { if( (rc = TableWriterAlgn_Make(&self->primary, db, ewalgn_tabletype_PrimaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ){ LOGERR(klogErr, rc, "primary alignment table"); } else if( (rc = TableWriterAlgn_Make(&self->secondary, db, ewalgn_tabletype_SecondaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ) { LOGERR(klogErr, rc, "secondary alignment table"); } else { int i; /* interconnect buffers */ for(i = 0; i < CG_MAPPINGS_MAX; i++) { self->algn[i].seq_spot_id.buffer = &self->match[i].seq_spot_id; self->algn[i].seq_spot_id.elements = 1; self->algn[i].seq_read_id.buffer = &self->match[i].seq_read_id; self->algn[i].seq_read_id.elements = 1; self->algn[i].read_start.buffer = &self->match[i].read_start; self->algn[i].read_len.buffer = &self->match[i].read_len; self->algn[i].has_ref_offset.buffer = self->match[i].has_ref_offset; self->algn[i].ref_offset.buffer = self->match[i].ref_offset; self->algn[i].ref_offset_type.buffer = self->match[i].ref_offset_type; self->algn[i].ref_id.buffer = &self->match[i].ref_id; self->algn[i].ref_start.buffer = &self->match[i].ref_start; self->algn[i].has_mismatch.buffer = self->match[i].has_mismatch; self->algn[i].mismatch.buffer = self->match[i].mismatch; self->algn[i].ref_orientation.buffer = &self->match[i].ref_orientation; self->algn[i].ref_orientation.elements = 1; self->algn[i].mapq.buffer = &self->match[i].mapq; self->algn[i].mapq.elements = 1; self->algn[i].mate_ref_orientation.buffer = &self->match[i].mate_ref_orientation; self->algn[i].mate_ref_orientation.elements = 1; self->algn[i].mate_ref_id.buffer = &self->match[i].mate_ref_id; self->algn[i].mate_ref_id.elements = 1; self->algn[i].mate_ref_pos.buffer = &self->match[i].mate_ref_pos; self->algn[i].mate_ref_pos.elements = 1; self->algn[i].template_len.buffer = &self->match[i].template_len; self->algn[i].template_len.elements = 1; } self->rmgr = rmgr; self->min_mapq = min_mapq; self->single_mate = single_mate; global_cluster_size = cluster_size; *data = &self->data; } } if( rc == 0 ) { *cself = self; } else { CGWriterAlgn_Whack(self, false, NULL, NULL); } return rc; }