ba33f2c600399d5b4b97dd5fd987ed2db3c891ba
chmalee
  Tue May 19 13:40:42 2026 -0700
myVariants related fixes from code review. Standardize how the code determines we are about to do something myVariants related by #defining some strings and using sameOk to check for them, remove a dead code block, and have hgc use autoSql to load the myVariants item rather than check the raw sql result, refs #37528

diff --git src/hg/hgc/myVariantsClick.c src/hg/hgc/myVariantsClick.c
index 3df5f1c2dca..4086546d22e 100644
--- src/hg/hgc/myVariantsClick.c
+++ src/hg/hgc/myVariantsClick.c
@@ -18,31 +18,31 @@
 #include "jsHelper.h"
 #include "web.h"
 #include "hgConfig.h"
 #include "jsonWrite.h"
 #include "htmshell.h"
 
 void doMyVariantsDetails(struct customTrack *ct, char *itemIdString)
 /* Show details of a myVariants item. */
 {
 jsIncludeFile("hgc.js",NULL);
 char *idString = cloneString(itemIdString);
 char *trackName = ct->tdb->track;
 
 /* Detect shared track and resolve table/permissions via hgcentral so that
  * revoked or downgraded shares no longer return owner data. */
-boolean isShared = startsWith("myVariants_shared_", trackName);
+boolean isShared = isMyVariantsSharedTrack(trackName);
 char *dataOwner = NULL;     /* user whose table holds the data */
 char *scopeProject = NULL;  /* live share's project, or NULL for own track */
 char *scopeDb = NULL;       /* live share's db, or NULL for own track */
 int permission = MYVAR_PERM_READONLY;
 if (isShared)
     {
     struct myVariantsShare *share = myVariantsResolveSharedTrack(trackName, cart);
     if (share == NULL)
         {
         printf("Share is no longer available.\n");
         return;
         }
     /* Shared tracks are per-assembly; reject details requests from other dbs. */
     if (!sameString(share->db, database))
         {
@@ -79,34 +79,38 @@
     freeMem(idStrCopy);
     return;
     }
 unsigned itemId = sqlUnsigned(idStrCopy);
 
 struct sqlConnection *conn = hAllocConn(CUSTOM_TRASH);
 struct dyString *query = sqlDyStringCreate(
     "select * from %s where id=%u", tableName, itemId);
 if (isNotEmpty(scopeDb))
     sqlDyStringPrintf(query, " and db='%s'", scopeDb);
 if (isNotEmpty(scopeProject) && !sameString(scopeProject, "*"))
     sqlDyStringPrintf(query, " and project='%s'", scopeProject);
 struct sqlResult *sr = sqlGetResult(conn, query->string);
 dyStringFree(&query);
 
-char **row = sqlNextRow(sr);
 struct myVariants *item = NULL;
-if (row != NULL && sameString(row[4], expectedName))
+char **row = sqlNextRow(sr);
+if (row != NULL)
+    {
     item = myVariantsLoad(row);
+    if (!sameOk(item->name, expectedName))
+        myVariantsFree(&item);
+    }
 sqlFreeResult(&sr);
 freeMem(idStrCopy);
 
 if (item != NULL)
     {
     /* Show shared banner */
     if (isShared)
         {
         if (canEdit)
             printf("<div style='padding:6px; margin-bottom:8px; background:#e8f5e9; "
                 "border:1px solid #a5d6a7; border-radius:4px'>"
                 "<B>Shared from %s</B></div>\n", htmlEncode(dataOwner));
         else
             printf("<div style='padding:6px; margin-bottom:8px; background:#e3f2fd; "
                 "border:1px solid #90caf9; border-radius:4px'>"