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);