4c1caa46a5cd5bb553e81373872a2b0fcbd618ae lrnassar Fri Sep 4 17:53:17 2026 -0700 Pick the newest deprecated transcript when mapping an HGVS protein term. Several deprecated transcript versions can share one protein version, and the lookup took whichever row came back first. Sort by length before value so that .10 beats .9 rather than losing a string comparison. refs #38248 diff --git src/hg/lib/hgHgvs.c src/hg/lib/hgHgvs.c index 7a63970b249..b603b35a2d1 100644 --- src/hg/lib/hgHgvs.c +++ src/hg/lib/hgHgvs.c @@ -2085,31 +2085,34 @@ txAcc = lrgProteinToTx(db, acc); else if (startsWith("ENS", acc)) txAcc = gencodeProteinToTx(db, acc); else if (startsWith("NP_", acc) || startsWith("XP_", acc)) { struct sqlConnection *conn = hAllocConn(db); char query[2048]; if (hDbHasNcbiRefSeq(db)) { sqlSafef(query, sizeof(query), "select mrnaAcc from ncbiRefSeqLink where protAcc = '%s'", acc); txAcc = sqlQuickString(conn, query); // user may have passed previous versioned transcript, check the *Old tables: if (!txAcc && hDbHasNcbiRefSeqHistorical(db)) { - sqlSafef(query, sizeof(query), "select mrnaAcc from ncbiRefSeqLinkHistorical where protAcc = '%s'", + // several deprecated transcript versions can share one protein version; + // take the newest. Sort by length first: '.9' beats '.10' as a string. + sqlSafef(query, sizeof(query), "select mrnaAcc from ncbiRefSeqLinkHistorical " + "where protAcc = '%s' order by length(mrnaAcc) desc, mrnaAcc desc", acc); txAcc = sqlQuickString(conn, query); } } else if (hTableExists(db, "refGene")) { sqlSafef(query, sizeof(query), "select mrnaAcc from %s l, refGene r " "where l.protAcc = '%s' and r.name = l.mrnaAcc", refLinkTable, acc); txAcc = sqlQuickString(conn, query); } else return NULL; hFreeConn(&conn); } if (txAcc)