7b6f3754b360c658474379263645fd8e91d6f46d braney Wed Dec 6 16:49:47 2023 -0800 add fixTrackDb program that will prune a trackDb table of tracks that have no data diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c index ceb1502..b37a1e6 100644 --- src/hg/lib/hdb.c +++ src/hg/lib/hdb.c @@ -3836,31 +3836,31 @@ * that may be split and/or * binned. */ { return hExtendedChromQuery(conn, rootTable, chrom, extraWhere, FALSE, NULL, retRowOffset); } boolean hTrackOnChrom(struct trackDb *tdb, char *chrom) /* Return TRUE if track exists on this chromosome. */ { boolean chromOk = TRUE; if (tdb->restrictCount > 0 && chrom != NULL) chromOk = (stringArrayIx(chrom, tdb->restrictList, tdb->restrictCount)) >= 0; return chromOk; } -static boolean loadOneTrackDb(char *db, char *where, char *tblSpec, +boolean loadOneTrackDb(char *db, char *where, char *tblSpec, struct trackDb **tdbList, struct hash *loaded) /* Load a trackDb table, including handling profiles:tbl. Returns * TRUE if table exists */ { char *tbl; boolean exists; // when using dbProfiles and a list of trackDb entries, it's possible that the // database doesn't exist in one of servers. struct sqlConnection *conn = hAllocConnProfileTblMaybe(db, tblSpec, &tbl); if ((exists = ((conn != NULL) && sqlTableExists(conn, tbl)))) { struct trackDb *oneTable = trackDbLoadWhere(conn, tbl, where), *oneRow; while ((oneRow = slPopHead(&oneTable)) != NULL) { if (!hashLookup(loaded, oneRow->track)) @@ -3871,31 +3871,31 @@ char *profileName = getTrackProfileName(oneRow); if (profileName != NULL) tableListProcessTblProfile(profileName, db); } else { trackDbFree(&oneRow); } } } hFreeConn(&conn); return exists; } -static struct trackDb *loadTrackDb(char *db, char *where) +struct trackDb *loadTrackDb(char *db, char *where) /* Load each trackDb table. Will put supertracks in parent field of given tracks but * these are still in track list. */ { if (trackHubDatabase(db)) return NULL; struct trackDb *tdbList = NULL; struct slName *tableList = hTrackDbList(), *one; boolean foundOne = FALSE; struct hash *loaded = hashNew(0); for (one = tableList; one != NULL; one = one->next) { if (loadOneTrackDb(db, where, one->name, &tdbList, loaded)) foundOne = TRUE; }