a3de0378c0ef6ffff6fd40e77407b2b8b80b5573
kate
  Wed Jul 5 12:00:34 2017 -0700
Allow bin field for speedup. refs #15646

diff --git src/hg/hgc/gtexEqtlClusterClick.c src/hg/hgc/gtexEqtlClusterClick.c
index e5fb972..8af729c 100644
--- src/hg/hgc/gtexEqtlClusterClick.c
+++ src/hg/hgc/gtexEqtlClusterClick.c
@@ -1,57 +1,66 @@
 /* Details page for GTEx eQTL Clusters */
 
 /* Copyright (C) 2017 The Regents of the University of California 
  * See README in this or parent directory for licensing information. */
 
 #include "common.h"
 #include "hCommon.h"
 #include "web.h"
 #include "gtexTissue.h"
 #include "gtexInfo.h"
 #include "gtexEqtlCluster.h"
 #include "hgc.h"
 
-static struct gtexEqtlCluster *getGtexEqtl(char *item, char *chrom, int start, char *table)
+static struct gtexEqtlCluster *getGtexEqtl(char *item, char *chrom, int start, int end, char *table)
 /* Retrieve this item from the track table */
 {
 char *gene = firstWordInLine(cloneString(item));
 struct sqlConnection *conn = hAllocConn(database);
-char query[512];
-sqlSafef(query, sizeof(query), "SELECT * FROM %s WHERE chrom='%s' AND chromStart=%d AND target='%s'",
-                                        table, chrom, start, gene);
-struct gtexEqtlCluster *eqtl = gtexEqtlClusterLoadByQuery(conn, query);
+struct gtexEqtlCluster *eqtls = NULL, *eqtl;
+char **row;
+int offset;
+char where[512];
+sqlSafefFrag(where, sizeof(where), "target='%s'", gene);
+struct sqlResult *sr = hRangeQuery(conn, table, chrom, start, end, where, &offset); 
+while ((row = sqlNextRow(sr)) != NULL)
+    {
+    eqtl = gtexEqtlClusterLoad(row+offset);
+    slAddHead(&eqtls, eqtl);
+    }
+slReverse(&eqtls);
+sqlFreeResult(&sr);
 hFreeConn(&conn);
-return eqtl;
+return eqtls;
 }
 
 static char *getGeneDescription(struct sqlConnection *conn, char *geneName)
 /* Return description from KnownGenes track */
 {
 char query[256];
 sqlSafef(query, sizeof query,
                 "SELECT kgXref.description FROM kgXref WHERE geneSymbol='%s'", geneName);
 return sqlQuickString(conn, query);
 }
 
 void doGtexEqtlDetails(struct trackDb *tdb, char *item)
 /* Details of GTEx eQTL item */
 {
 char *chrom = cartString(cart, "c");
 int start = cartInt(cart, "o");
-int end;
-struct gtexEqtlCluster *eqtl = getGtexEqtl(item, chrom, start, tdb->table);
+int end = cartInt(cart, "t");
+struct gtexEqtlCluster *eqtl = getGtexEqtl(item, chrom, start, end, tdb->table);
 genericHeader(tdb, item);
 char *version = gtexVersion(tdb->table);
 struct gtexTissue *tissues = gtexGetTissues(version);
 struct hash *tissueHash = hashNew(0);
 struct gtexTissue *tis = NULL;
 for (tis = tissues; tis != NULL; tis = tis->next)
     hashAdd(tissueHash, tis->name, tis);
 int i;
 
 struct sqlConnection *conn = hAllocConn(database);
 char *geneName = eqtl->target;
 char *desc = getGeneDescription(conn, geneName);
 printf("<b>Gene: </b>");
 if (desc == NULL)
     printf("%s<br>\n", geneName);