fcf958bebc396bd7aac5885e27c554087d406d7f
chmalee
  Tue May 7 09:55:13 2024 -0700
Sort genark searches by taxId, refs #33572

diff --git src/hg/hgGateway/hgGateway.c src/hg/hgGateway/hgGateway.c
index 38ce8e4..00f18be 100644
--- src/hg/hgGateway/hgGateway.c
+++ src/hg/hgGateway/hgGateway.c
@@ -952,48 +952,50 @@
 }
 
 static struct gHubMatch *filterGenarkMatches(char *genarkHubUrl, struct genark *matchList)
 /* Turn the sql results into a struct gHubMatch list */
 {
 struct genark *match;
 struct gHubMatch *ret = NULL;
 
 for (match = matchList; match != NULL; match = match->next)
     {
     // the match contains tab-sep accession, hubUrl, asmName, scientificName, commonName
     char hubUrl[PATH_LEN+1];
     safef(hubUrl, sizeof(hubUrl), "%s/%s", genarkHubUrl, match->hubUrl);
     slAddHead(&ret, gHubMatchNew(match->gcAccession, hubUrl, match->asmName, match->scientificName, match->commonName, -1));
     }
+if (ret)
+    slReverse(&ret);
 return ret;
 }
 
 static struct gHubMatch *searchGenark(char *term)
 /* Search through the genark table for hubs matches term */
 {
 char *genarkPrefix = cfgOption("genarkHubPrefix");
 if (genarkPrefix == NULL)
     return NULL;
 
 struct gHubMatch *gHubMatchList = NULL;
 char *genarkTbl = genarkTableName();
 struct sqlConnection *conn = hConnectCentral();
 if (sqlTableExists(conn, genarkTbl))
     {
     char query[1024];
     sqlSafef(query, sizeof(query), "select * from %s where "
-             "(gcAccession like '%%%s%%' or scientificName like '%%%s%%' or commonName like '%%%s%%' or asmName like '%%%s%%') order by commonName ASC",
+             "(gcAccession like '%%%s%%' or scientificName like '%%%s%%' or commonName like '%%%s%%' or asmName like '%%%s%%') order by taxId ASC, commonName DESC",
              genarkTbl, term, term, term, term);
     struct genark *matchList = genarkLoadByQuery(conn, query);
     gHubMatchList = filterGenarkMatches(genarkPrefix, matchList);
     }
 hDisconnectCentral(&conn);
 return gHubMatchList;
 }
 
 static char *getSearchTermUpperCase()
 /* If we don't have the SEARCH_TERM cgi param, exit with an HTTP Bad Request response.
  * If we do, convert it to upper case for case-insensitive matching and return it. */
 {
 pushWarnHandler(htmlVaBadRequestAbort);
 pushAbortHandler(htmlVaBadRequestAbort);
 char *cgiTerm = cgiOptionalString(SEARCH_TERM);