dc10667b65395ddad3445a55cd2a2c16a3715103 angie Fri Nov 2 15:10:20 2018 -0700 Restricting use of tName in getAlignments query to doPslAltSeq only, after Braney pointed out in code review that changing the default behavior is not wise. refs CR #22353 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index be40dfe..f304287 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -5932,58 +5932,64 @@ safef(otherString, sizeof(otherString), "%d&aliTable=%s", psl->tStart, tableName); hgcAnchorSomewhere(hgcCommandInWindow, itemIn, otherString, psl->tName); printf("
View details of parts of alignment within browser window.
\n"); } } } void printAlignments(struct psl *pslList, int startFirst, char *hgcCommand, char *tableName, char *itemIn) /* Print list of mRNA alignments. */ { printAlignmentsExtra(pslList, startFirst, hgcCommand, "htcCdnaAliInWindow", tableName, itemIn); } -struct psl *getAlignments(struct sqlConnection *conn, char *table, char *acc) -/* get the list of alignments for the specified acc */ +static struct psl *getAlignmentsTName(struct sqlConnection *conn, char *table, char *acc, + char *tName) +/* get the list of alignments for the specified acc and tName (if given). */ { struct sqlResult *sr = NULL; char **row; struct psl *psl, *pslList = NULL; boolean hasBin; -char splitTable[64]; -char query[256]; +char splitTable[256]; +char query[1024]; if (!hFindSplitTable(database, seqName, table, splitTable, &hasBin)) errAbort("can't find table %s or %s_%s", table, seqName, table); -char *chr = cartOptionalString(cart, "c"); -if (isNotEmpty(chr)) +if (isNotEmpty(tName)) sqlSafef(query, sizeof(query), "select * from %s where qName = '%s' and tName = '%s'", - splitTable, acc, chr); + splitTable, acc, tName); else sqlSafef(query, sizeof(query), "select * from %s where qName = '%s'", splitTable, acc); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { psl = pslLoad(row+hasBin); slAddHead(&pslList, psl); } sqlFreeResult(&sr); slReverse(&pslList); return pslList; } +struct psl *getAlignments(struct sqlConnection *conn, char *table, char *acc) +/* get the list of alignments for the specified acc */ +{ +return getAlignmentsTName(conn, table, acc, NULL); +} + struct psl *loadPslRangeT(char *table, char *qName, char *tName, int tStart, int tEnd) /* Load a list of psls given qName tName tStart tEnd */ { struct sqlResult *sr = NULL; char **row; struct psl *psl = NULL, *pslList = NULL; boolean hasBin; char splitTable[64]; char query[256]; struct sqlConnection *conn = hAllocConn(database); hFindSplitTable(database, seqName, table, splitTable, &hasBin); sqlSafef(query, sizeof(query), "select * from %s where qName = '%s' and tName = '%s' and tEnd > %d and tStart < %d", splitTable, qName, tName, tStart, tEnd); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) @@ -8908,38 +8914,39 @@ if (qRangeStart < 0 || partPsl->qStart < qRangeStart) qRangeStart = partPsl->qStart; if (qRangeEnd < 0 || partPsl->qEnd > qRangeEnd) qRangeEnd = partPsl->qEnd; } } } *retQRangeStart = qRangeStart; *retQRangeEnd = qRangeEnd; return foundOverlap; } void doPslAltSeq(struct trackDb *tdb, char *item) /* Details for alignments between chromosomes and alt haplogtype or fix patch sequences. */ { +char *chrom = cartString(cart, "c"); int start = cartInt(cart, "o"); struct sqlConnection *conn = hAllocConn(database); genericHeader(tdb, item); printCustomUrl(tdb, item, TRUE); puts("

"); -struct psl *pslList = getAlignments(conn, tdb->table, item); +struct psl *pslList = getAlignmentsTName(conn, tdb->table, item, chrom); if (pslList) { printf("Alignment of %s to %s:
\n", item, pslList->tName); printAlignments(pslList, start, "htcCdnaAli", tdb->table, item); char *hgsid = cartSessionId(cart); int rangeStart = 0, rangeEnd = 0; if (pslTrimListToTargetRange(pslList, winStart, winEnd, &rangeStart, &rangeEnd)) { printf("" "View corresponding position range on %s
\n", hgsid, item, rangeStart+1, rangeEnd, item); } char *altFix = item; if (!endsWith(altFix, "alt") && !endsWith(altFix, "fix"))