static void brokenRefPepTblFree(struct brokenRefPepTbl **brpTblPtr) /* free brokenRefPepTbl */ { struct brokenRefPepTbl *brpTbl = *brpTblPtr; /* all dynamic memory is hash localmem */ #ifdef DUMP_HASH_STATS hashPrintStats(brpTbl->protAccHash, "protAcc", stderr); hashPrintStats(brpTbl->protFaHash, "protFa", stderr); #endif hashFree(&brpTbl->protAccHash); hashFree(&brpTbl->protFaHash); freeMem(brpTbl); *brpTblPtr = NULL; }
static boolean raRecLoad(struct raInfoTbl *rit, unsigned srcDb, struct lineFile *raLf, unsigned cdnaExtId, unsigned pepExtId) /* load next ra record */ { char *acc, *protAccVer, protAcc[GB_ACC_BUFSZ]; int ver; struct hash *raRec = raNextRecord(raLf); if (raRec == NULL) return FALSE; acc = hashMustFindVal(raRec, "acc"); ver = sqlSigned((char*)hashMustFindVal(raRec, "ver")); raInfoAdd(rit, raRec, acc, ver, "siz", "fao", "fas", cdnaExtId); if ((srcDb == GB_REFSEQ) && ((protAccVer = hashFindVal(raRec, "prt")) != NULL)) { if (pepExtId == 0) errAbort("%s has protein %s, but no pep.fa file", acc, protAccVer); ver = gbSplitAccVer(protAccVer, protAcc); raInfoAdd(rit, raRec, protAcc, ver, "prs", "pfo", "pfs", pepExtId); } #ifdef DUMP_HASH_STATS hashPrintStats(raRec, "raRec", stderr); #endif hashFree(&raRec); return TRUE; }
static struct slName *getGenomeDbs(struct gbConf *conf) /* get list of genome databases from variable names */ { // build hash of dbs struct hash *dbSet = hashNew(20); struct hashCookie cookie = hashFirst(conf->hash); struct hashEl *hel; while ((hel = hashNext(&cookie)) != NULL) { char *prefix = parsePrefix(hel->name); if (isGenomeDb(prefix)) hashStore(dbSet, prefix); } // convert to a list of dbs struct slName *dbs = NULL; cookie = hashFirst(dbSet); while ((hel = hashNext(&cookie)) != NULL) slSafeAddHead(&dbs, slNameNew(hel->name)); #ifdef DUMP_HASH_STATS hashPrintStats(dbSet, "gbConfDbSet", stderr); #endif hashFree(&dbSet); slSort(&dbs, slNameCmp); return dbs; }
struct sqlDeleter *gbBuildStateReloadDeleter(struct sqlConnection *conn, struct gbSelect* select, char *tmpDirPath) /* get deleter for list of accessions to reload for the selected categories. * Used when reloading. Returns null if none found */ { struct hash* seqTblAccs; struct slName *gbStatAccs, *acc; struct hashCookie cookie; struct hashEl *hel; struct sqlDeleter* deleter; unsigned cnt = 0; unsigned statTblSelect = select->release->srcDb | select->orgCats | select->type; /* ESTs not implemented, which gets rid of complexities of accPrefix */ if (select->type & GB_EST) errAbort("gbBuildStateReloadDeleter doesn't handle ESTs"); seqTblAccs = seqTblLoadAcc(conn, select); gbStatAccs = gbStatusTblLoadAcc(conn, statTblSelect, NULL); /* build up deleter combining the two */ deleter = sqlDeleterNew(tmpDirPath, (gbVerbose >= 4)); cookie = hashFirst(seqTblAccs); while ((hel = hashNext(&cookie)) != NULL) { sqlDeleterAddAcc(deleter, hel->name); cnt++; } for (acc = gbStatAccs; acc != NULL; acc = acc->next) { if (hashLookup(seqTblAccs, acc->name) == NULL) { sqlDeleterAddAcc(deleter, acc->name); cnt++; } } #ifdef DUMP_HASH_STATS hashPrintStats(seqTblAccs, "seqTblAccs", stderr); #endif hashFree(&seqTblAccs); slFreeList(&gbStatAccs); if (cnt == 0) sqlDeleterFree(&deleter); return deleter; }
void gbIgnoreFree(struct gbIgnore** ignorePtr) /* Free gbIgnore object */ { struct gbIgnore* ignore = *ignorePtr; if (ignore != NULL) { #ifdef DUMP_HASH_STATS if (ignore->accHash != NULL) hashPrintStats(ignore->accHash, "ignoreAcc", stderr); #endif hashFree(&ignore->accHash); freeMem(ignore); *ignorePtr = NULL; } }
struct gbStatusTbl* gbBuildState(struct sqlConnection *conn, struct gbSelect* select, struct dbLoadOptions* options, float maxShrinkage, char* tmpDir, int verboseLevel, boolean extFileUpdate, boolean* maxShrinkageExceeded) /* Load status table and find of state of all genbank entries in the release * compared to the database. */ { struct gbStatusTbl* statusTbl; struct selectStatusData ssData; unsigned selectFlags = (select->type | select->release->srcDb); ZeroVar(&ssData); gOptions = options; *maxShrinkageExceeded = FALSE; gbVerbose = verboseLevel; gErrorCnt = 0; loadNonCoding = dbLoadNonCoding(sqlGetDatabase(conn), select); if (loadNonCoding) gbVerbMsg(1, "NOTE: loading non-coding"); gbVerbEnter(3, "build state table"); gbVerbMsg(4, "reading gbSeq accessions"); ssData.select = select; ssData.seqHash = seqTblLoadAcc(conn, select); gbVerbMsg(4, "reading gbStatus"); statusTbl = gbStatusTblSelectLoad(conn, selectFlags, select->accPrefix, selectStatus, &ssData, tmpDir, extFileUpdate, (gbVerbose >= 4)); findNewEntries(select, statusTbl); /* Don't allow deletes when select criteria has changed */ if ((ssData.orgCatDelCnt > 0) && !(gOptions->flags & DBLOAD_LARGE_DELETES)) errAbort("%u entries deleted due to organism category no longer being selected, specify -allowLargeDeletes to override", ssData.orgCatDelCnt); /* check shrinkage unless override */ if ((gOptions->flags & DBLOAD_LARGE_DELETES) == 0) { if (!checkShrinkage(select, maxShrinkage, statusTbl)) *maxShrinkageExceeded = TRUE; } /* don't do other setup if we are going to stop on maxShrinkageExceeded */ if (!*maxShrinkageExceeded) { gbVerbMsg(4, "checking for orphans"); findOrphans(conn, select, ssData.seqHash, statusTbl); if (((gOptions->flags & DBLOAD_INITIAL) == 0)) { gbVerbMsg(4, "checking for type change"); checkForTypeChange(conn, select, statusTbl); } } #ifdef DUMP_HASH_STATS hashPrintStats(ssData.seqHash, "stateSeq", stderr); #endif hashFree(&ssData.seqHash); gbVerbLeave(3, "build state table"); /* always print stats */ fprintf(stderr, "gbLoadRna: selected %s: delete=%u seqChg=%u metaChg=%u extChg=%u new=%u orphan=%u derived=%u noChg=%u\n", gbSelectDesc(select), statusTbl->numDelete, statusTbl->numSeqChg, statusTbl->numMetaChg, statusTbl->numExtChg, statusTbl->numNew, statusTbl->numOrphan, statusTbl->numRebuildDerived, statusTbl->numNoChg); /* this doesn't include large delete errors */ if (gErrorCnt > 0) errAbort("Errors detecting when constructing state table"); return statusTbl; }