94041c12e043016875ebd340568bda0ccaf122f6 lrnassar Wed Jul 8 13:53:22 2026 -0700 Add db= to cross-CGI hgTracks/hgTrackUi/hgc links to prevent wrong-assembly errors. refs #37840 Completes the incomplete work from #26892: links from the browser to a different CGI omitted db=, so the target CGI fell back to the cart's db (often wrong), producing "Can't find in track database " errors and broken shared links. Adds the current-assembly db to link builders across hgTracks (chromGraphTrack, expRatioTracks, config ruler and per-track configure links, variation), hgVai, hgFileUi, hgGtexTrackSettings, hgBlat, hgGene, hgNear, the barChart/GTEx faceted UI (facetedBar, barChartUi, gtexUi), and the hgTrackUi group-configure link. diff --git src/hg/hgGene/pseudoGene.c src/hg/hgGene/pseudoGene.c index 3926510fae1..5b49b9e1c4f 100644 --- src/hg/hgGene/pseudoGene.c +++ src/hg/hgGene/pseudoGene.c @@ -1,119 +1,119 @@ /* pseudoGene descriptions. */ /* Copyright (C) 2013 The Regents of the University of California * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #include "common.h" #include "hash.h" #include "linefile.h" #include "dystring.h" #include "spDb.h" #include "hdb.h" #include "web.h" #include "genePred.h" #include "bed.h" #include "hgGene.h" #include "genbank.h" static boolean pseudoGeneExists(struct section *section, struct sqlConnection *conn, char *geneId) /* Return TRUE if mrna on this one. */ { boolean result; result = FALSE; if (hTableExists(sqlGetDatabase(conn), "ucscRetroInfo")) { struct sqlResult *sr; char **row; char query[255]; sqlSafef(query, sizeof(query), "select name from ucscRetroInfo where name='%s' or kgName='%s' or refseq='%s'", geneId, geneId, geneId); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) != NULL) { result = TRUE; } sqlFreeResult(&sr); } return(result); } static void pseudoGenePrint(struct section *section, struct sqlConnection *conn, char *geneId) /* Print out mrna descriptions annotations. */ { struct sqlResult *sr; char **row; char condStr[255]; char *descID, *desc; char *emptyStr; char query[255]; char *name, *chrom, *chromStart, *chromEnd, *refseq, *rtype; int score; webPrintLinkTableStart(); webPrintLabelCell("Retro Id"); webPrintLabelCell("Type"); webPrintLabelCell("Score "); webPrintLabelCell("Genome Location"); webPrintLabelCell("Description"); hPrintf("\n"); emptyStr = cloneString(""); sqlSafef(query, sizeof(query), "select distinct name, chrom, chromStart, chromEnd, refseq, type, score from ucscRetroInfo where name='%s' or kgName='%s' or refseq='%s'", geneId, geneId, geneId); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { name = row[0]; chrom = row[1]; chromStart = row[2]; chromEnd = row[3]; refseq = row[4]; rtype = row[5]; score = sqlUnsigned(row[6]); desc = emptyStr; sqlSafef(condStr, sizeof(condStr), "acc='%s'", refseq); descID= sqlGetField(database, gbCdnaInfoTable, "description", condStr); if (descID != NULL) { sqlSafef(condStr, sizeof(condStr), "id=%s", descID); desc = sqlGetField(database, descriptionTable, "name", condStr); if (desc == NULL) desc = emptyStr; } webPrintLinkCellStart(); - hPrintf("%s", name, name); + hPrintf("%s", database, name, name); webPrintLinkCellEnd(); webPrintLinkCellStart(); hPrintf("%s ", rtype); webPrintLinkCellEnd(); webPrintLinkCellStart(); hPrintf("%d ", score); webPrintLinkCellEnd(); webPrintLinkCellStart(); hPrintf("%s:%s-%s", chrom, chromStart, chromEnd, name, chrom, chromStart, chromEnd); webPrintLinkCellEnd(); webPrintLinkCellStart(); hPrintf("%s\n", desc); webPrintLinkCellEnd(); hPrintf("\n"); } sqlFreeResult(&sr); } struct section *pseudoGeneSection(struct sqlConnection *conn, struct hash *sectionRa) /* Create pseudoGene section. */ { struct section *section = sectionNew(sectionRa, "pseudoGene"); section->exists = pseudoGeneExists; section->print = pseudoGenePrint; return section; }