b2b58edce8b1d75567737b05e21ba9103073c69d
chmalee
  Mon May 4 12:11:37 2026 -0700
Fix myVariants tracks to load via a hardcoded query rather than hRangeQuery because the tableName is already qualified with the database. Remove dead code after refactor. Fix table browser output for myVariants tracks for various options, refs #33808

diff --git src/hg/hgTracks/myVariantsTrack.c src/hg/hgTracks/myVariantsTrack.c
index f668f784a1e..bc73e082bba 100644
--- src/hg/hgTracks/myVariantsTrack.c
+++ src/hg/hgTracks/myVariantsTrack.c
@@ -397,33 +397,38 @@
                 cartSetString(cart, ctVar, ctFile);
                 freeMem(ctFile);
                 }
             }
     }
     }
 }
 
 static struct linkedFeatures *loadMyVariantsItems(struct sqlConnection *conn,
     char *tableName, struct trackDb *tdb, char *whereExtra)
 /* Query tableName for myVariants items in the current window matching the
  * whereExtra clause (e.g. "db='hg38' and project='test'") and return them
  * as a linkedFeatures list. */
 {
 struct linkedFeatures *lf, *lfList = NULL;
-int rowOffset;
-struct sqlResult *sr = hRangeQuery(conn, tableName, chromName, winStart, winEnd,
-    whereExtra, &rowOffset);
+struct dyString *query = sqlDyStringCreate("select * from %s where ", tableName);
+hAddBinToQueryGeneral("bin", winStart, winEnd, query);
+sqlDyStringPrintf(query, " chrom='%s' and chromStart < %d and chromEnd > %d",
+        chromName, winEnd, winStart);
+if (isNotEmpty(whereExtra))
+    sqlDyStringPrintf(query, " and (%-s)", whereExtra);
+struct sqlResult *sr = sqlGetResult(conn, query->string);
+dyStringFree(&query);
 char **row;
 struct dyString *mouseover = dyStringNew(0);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     struct myVariants *item = myVariantsLoad(row);
     struct bed *bed;
     AllocVar(bed);
     char buf[64];
     safef(buf, sizeof(buf), "%u %s", item->id, item->name);
     bed->chrom = item->chrom;
     bed->chromStart = item->chromStart;
     bed->chromEnd = item->chromEnd;
     bed->name = cloneString(buf);
     bed->score = item->score;
     bed->strand[0] = item->strand[0];
@@ -553,55 +558,30 @@
 	myVariantsExtraHeight(track);
 return track->height;
 }
 
 void myVariantsMethods(struct track *track)
 /* Set up special methods for myVariants type tracks. */
 {
 linkedFeaturesMethods(track);
 track->totalHeight = myVariantsTotalHeight;
 track->drawLeftLabels = myVariantsDrawLeftLabels;
 track->loadItems = myVariantsLoadItems;
 track->itemName = myVariantsName;
 track->nextItemButtonable = TRUE;
 }
 
-struct trackDb *myVariantsFakeTdb()
-/* Construct a trackDb record for myVariants track. */
-{
-char *userName = getUserName();
-struct trackDb *tdb = customTrackTdbDefault();
-char *tableName = myVariantsCreateTable(userName);
-if (!tableName)
-    errAbort("Error creating myVariants table for user '%s'", userName);
-tdb->track = "myVariants";
-tdb->table = cloneString(tableName);
-tdb->type = "myVariants";
-trackDbAddSetting(tdb, "mouseOverField", "description");
-return tdb;
-}
-
-struct track *myVariantsTg()
-/* Make track that will ultimately have the data from:
- * CUSTOM_TRASH.myVariants_userName table */
-{
-struct trackDb *tdb = myVariantsFakeTdb();
-struct track *tg = trackFromTrackDb(tdb);
-myVariantsMethods(tg);
-return tg;
-}
-
 static void apiSuccess(struct jsonWrite *jw)
 /* Send 200 JSON response and exit. */
 {
 printf("Content-Type: application/json\n\n");
 puts(jw->dy->string);
 jsonWriteFree(&jw);
 exit(0);
 }
 
 static void apiError(int httpStatus, char *message)
 /* Send error JSON response with given HTTP status and exit. */
 {
 printf("Status: %d\n", httpStatus);
 printf("Content-Type: application/json\n\n");
 struct jsonWrite *jw = jsonWriteNew();