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