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("<BR>View details of parts of alignment within browser window</A>.<BR>\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("<P>");
-struct psl *pslList = getAlignments(conn, tdb->table, item);
+struct psl *pslList = getAlignmentsTName(conn, tdb->table, item, chrom);
 if (pslList)
     {
     printf("<B>Alignment of %s to %s:</B><BR>\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("<A HREF='hgTracks?hgsid=%s&position=%s:%d-%d'>"
                "View corresponding position range on %s</A><BR>\n",
                hgsid, item, rangeStart+1, rangeEnd, item);
         }
     char *altFix = item;
     if (!endsWith(altFix, "alt") && !endsWith(altFix, "fix"))