cdb348c551227ac24dc0fab9f18516459b47b962
braney
Sat Sep 5 11:33:32 2026 -0700
hgTrackUi: don't try MySQL for a GenArk quickLift source assembly, refs #38272
The track settings page swaps in the track's quickLiftDb for the database it
passes down to the cfg routines. For a GenArk source that is a bare accession
with no MySQL database behind it, and asForDb() connected anyway, so the page
stopped after the display-mode row. trackHubDatabase() does not catch this
because the source hub is not loaded in that request; hgc got the matching
isGenArk() guard in #37388.
Two filter blocks in the same file guarded with isHubTrack(), a plain hub_
prefix test that a bare accession also slips past. Same guard added there.
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index ba3f2b888ac..51caa008e9b 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -7028,31 +7028,31 @@
boolean boxed, boolean parentLevel,char *name, char *title,
boolean isHighlight)
// Shows all *Filter style filters. Note that these are in random order and have no graceful title
{
int count = 0;
struct trackDbFilter *trackDbFilters = NULL;
if (isHighlight)
trackDbFilters = tdbGetTrackNumHighlights(tdb);
else
trackDbFilters = tdbGetTrackNumFilters(tdb);
if (trackDbFilters)
{
puts("
");
struct trackDbFilter *filter = NULL;
struct sqlConnection *conn = NULL;
- if (!isHubTrack(db))
+ if (!isHubTrack(db) && !isGenArk(db))
conn = hAllocConnTrack(db, tdb);
struct asObject *as = asForTdb(conn, tdb);
hFreeConn(&conn);
while ((filter = slPopHead(&trackDbFilters)) != NULL)
{
char *field = filter->fieldName;
char *scoreName = cloneString(filter->name);
char *trackDbLabel = getLabelSetting(cart, tdb, field);
if (as != NULL)
{
struct asColumn *asCol = asColumnFind(as, field);
if (asCol != NULL)
{ // Found label so replace field; strip "|..." suffix used for detail page
@@ -7172,31 +7172,31 @@
static int textFiltersShowAll(char *db, struct cart *cart, struct trackDb *tdb, boolean isHighlight)
/* Show all the text filters for this track. */
{
int count = 0;
struct trackDbFilter *trackDbFilters = NULL;
if (isHighlight)
trackDbFilters = tdbGetTrackTextHighlights(tdb);
else
trackDbFilters = tdbGetTrackTextFilters(tdb);
if (trackDbFilters)
{
puts("
");
struct trackDbFilter *filter = NULL;
struct sqlConnection *conn = NULL;
- if (!isHubTrack(db))
+ if (!isHubTrack(db) && !isGenArk(db))
conn = hAllocConnTrack(db, tdb);
struct asObject *as = asForTdb(conn, tdb);
hFreeConn(&conn);
while ((filter = slPopHead(&trackDbFilters)) != NULL)
{
char *trackDbLabel = getLabelSetting(cart, tdb, filter->fieldName);
char *value = cartUsualStringClosestToHome(cart, tdb, FALSE, filter->name, filter->setting);
if (as != NULL)
{
struct asColumn *asCol = asColumnFind(as, filter->fieldName);
if (asCol != NULL)
{
if (trackDbLabel == NULL)
trackDbLabel = asCol->comment;
}
@@ -10606,31 +10606,33 @@
struct asObject *asObj = NULL;
// Wrap some error catching around asForTdbOrDie.
if (errCatchStart(errCatch))
{
asObj = asForTdbOrDie(conn, tdb);
}
errCatchEnd(errCatch);
errCatchFree(&errCatch);
return asObj;
}
struct asObject *asForDb(struct trackDb *tdb, char* database)
/* return asObject given the database. NULL if not found */
{
struct sqlConnection *conn = NULL ;
-if (!trackHubDatabase(database))
+// database can be a quickLift track's source assembly, which for a GenArk arrives
+// here as a bare accession with no MySQL database behind it.
+if (!trackHubDatabase(database) && !isGenArk(database))
conn = hAllocConnTrack(database, tdb);
struct asObject *as = asForTdb(conn, tdb);
hFreeConn(&conn);
return as;
}
#ifdef OLD /* This got moved to main library . */
struct asColumn *asColumnFind(struct asObject *asObj, char *name)
// Return named column.
{
struct asColumn *asCol = NULL;
if (asObj!= NULL)
{
for (asCol = asObj->columnList; asCol != NULL; asCol = asCol->next)
if (sameString(asCol->name, name))