5c9ad606d5b486c3e1360250907cae2c13869d90 braney Sun Mar 29 12:52:58 2026 -0700 Factor out common quickLift SQL load pattern into shared functions Add quickLiftResolveTable() and quickLiftSqlLoadBeds() to eliminate duplicated custom-track resolution and SQL-based quickLift loading code across bedTrack.c, simpleTracks.c, gvfTrack.c, and hgc.c. No redmine Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> diff --git src/hg/hgTracks/gvfTrack.c src/hg/hgTracks/gvfTrack.c index 0816ed6aa29..904871ccf47 100644 --- src/hg/hgTracks/gvfTrack.c +++ src/hg/hgTracks/gvfTrack.c @@ -94,47 +94,34 @@ diff = strcmp(aParentName, bParentName); return diff; } } static void gvfLoad(struct track *tg) /* Load GVF items from a bed8Attrs database table. */ { struct bed8Attrs *list = NULL, *bed; char *liftDb = cloneString(trackDbSetting(tg->tdb, "quickLiftDb")); if (nameHash == NULL) nameHash= hashNew(0); if (liftDb != NULL) { - char *table; - if (isCustomTrack(tg->table)) - { - liftDb = CUSTOM_TRASH; - table = trackDbSetting(tg->tdb, "dbTableName"); - } - else - table = tg->table; - struct hash *chainHash = newHash(8); - struct sqlConnection *conn = hAllocConn(liftDb); - char *quickLiftFile = cloneString(trackDbSetting(tg->tdb, "quickLiftUrl")); - bed= (struct bed8Attrs *)quickLiftSql(conn, quickLiftFile, table, chromName, winStart, winEnd, NULL, NULL, (ItemLoader2)bed8AttrsLoad, 0, chainHash); - - list = (struct bed8Attrs *)quickLiftBeds((struct bed *)bed, chainHash, FALSE); + list = (struct bed8Attrs *)quickLiftSqlLoadBeds(tg->tdb, tg->table, liftDb, chromName, + winStart, winEnd, NULL, (ItemLoader2)bed8AttrsLoad, 0, FALSE); for(bed=list; bed; bed = bed->next) hashAdd(nameHash, bed->name, bed); - hFreeConn(&conn); } else { struct sqlConnection *conn = hAllocConn(database); int rowOffset; struct sqlResult *sr = hRangeQuery(conn, tg->table, chromName, winStart, winEnd, NULL, &rowOffset); char **row; // if we someday get dense GVF tracks, might consider upping the default hash size: while ((row = sqlNextRow(sr)) != NULL) { struct bed8Attrs *gvf = bed8AttrsLoad(row+rowOffset); slAddHead(&list, gvf); hashAdd(nameHash, gvf->name, gvf); } sqlFreeResult(&sr);