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) diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 3ca4c1464fa..4d2d8457048 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -2049,47 +2049,41 @@ { char table[HDB_MAX_TABLE_STRING]; boolean hasBin; struct bed *bed; char query[512]; struct sqlResult *sr; char **row; boolean firstTime = TRUE; char *liftDb = cloneString(trackDbSetting(tdb, "quickLiftDb")); char *db = database; char *sqlTable = tdb->table; if (liftDb != NULL) { - if (isCustomTrack(trackHubSkipHubName(tdb->track))) - { - liftDb = CUSTOM_TRASH; - sqlTable = trackDbSetting(tdb, "dbTableName"); - } + quickLiftResolveTable(tdb, trackHubSkipHubName(tdb->track), &sqlTable, &liftDb); db = liftDb; } if (!hFindSplitTable(db, seqName, tdb->table, table, sizeof table, &hasBin)) errAbort("genericBedClick track %s not found", tdb->table); if (liftDb) { - struct hash *chainHash = newHash(10); - char *quickLiftFile = cloneString(trackDbSetting(tdb, "quickLiftUrl")); - bed = (struct bed *)quickLiftSql(conn, quickLiftFile, sqlTable, seqName, winStart, winEnd, NULL, NULL, (ItemLoader2)bedLoadN, bedSize, chainHash); - struct bed *liftedBeds = quickLiftBeds(bed, chainHash, FALSE); + struct bed *liftedBeds = quickLiftSqlLoadBeds(tdb, trackHubSkipHubName(tdb->track), liftDb, + seqName, winStart, winEnd, NULL, (ItemLoader2)bedLoadN, bedSize, FALSE); bedPrintPos(liftedBeds, bedSize, tdb); //extraFieldsPrint(tdb,sr,row,sqlCountColumns(sr)); } else { if (bedSize <= 3) sqlSafef(query, sizeof query, "select * from %s where chrom = '%s' and chromStart = %d", table, seqName, start); else { struct hTableInfo *hti = hFindTableInfoWithConn(conn, seqName, tdb->table); if (hti && *hti->nameField && differentString("name", hti->nameField)) sqlSafef(query, sizeof query, "select * from %s where %s = '%s' and chrom = '%s' and chromStart = %d", table, hti->nameField, item, seqName, start); else