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'>"