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