3ccd2b6675cc1955d74aec568ef2fdc852bd3fd7 hiram Fri Jun 14 12:12:57 2024 -0700 adding a /list/genarkGenomes endpoint refs #23589 diff --git src/hg/hubApi/apiUtils.c src/hg/hubApi/apiUtils.c index 3ae0532..6df59a0 100644 --- src/hg/hubApi/apiUtils.c +++ src/hg/hubApi/apiUtils.c @@ -453,38 +453,78 @@ else if (0 == hashIntValDefault(validHash, var->name, 0)) { if (extrasFound) dyStringPrintf(extras, ";%s=%s", var->name, var->val); else dyStringPrintf(extras, "%s=%s", var->name, var->val); ++extrasFound; } } if (extrasFound) return dyStringCannibalize(&extras); else return NULL; } +static int genArkCmpName(const void *va, const void *vb) +/* Compare two genark elements: gcAccession, ignore case. */ +{ +const struct genark *a = *((struct genark **)va); +const struct genark *b = *((struct genark **)vb); +return strcasecmp(a->gcAccession, b->gcAccession); +} + static int dbDbCmpName(const void *va, const void *vb) /* Compare two dbDb elements: name, ignore case. */ { const struct dbDb *a = *((struct dbDb **)va); const struct dbDb *b = *((struct dbDb **)vb); return strcasecmp(a->name, b->name); } +long long genArkSize() +/* return the number of rows in genark table */ +{ +char query[1024]; +struct sqlConnection *conn = hConnectCentral(); +sqlSafef(query, sizeof(query), "SELECT COUNT(*) FROM %s", genarkTableName()); +return sqlQuickLongLong(conn, query); +} + +struct genark *genArkList(char *oneAccession) +/* return the genark table as an slList, or just the one accession when given */ +{ +char query[1024]; +struct sqlConnection *conn = hConnectCentral(); +if (oneAccession) + sqlSafef(query, sizeof(query), "SELECT * FROM %s WHERE gcAccession = '%s'", genarkTableName(), oneAccession); +else + sqlSafef(query, sizeof(query), "SELECT * FROM %s ORDER BY gcAccession limit %d", genarkTableName(), maxItemsOutput); +struct genark *list = NULL, *el = NULL; +struct sqlResult *sr = sqlGetResult(conn, query); +char **row; +while ((row = sqlNextRow(sr)) != NULL) + { + el = genarkLoad(row); + slAddHead(&list, el); + } +sqlFreeResult(&sr); +hDisconnectCentral(&conn); +slSort(&list, genArkCmpName); +return list; +} + struct dbDb *ucscDbDb() /* return the dbDb table as an slList */ { char query[1024]; struct sqlConnection *conn = hConnectCentral(); char *showActive0 = cfgOptionDefault("hubApi.showActive0", "off"); if (sameWord("on", showActive0)) sqlSafef(query, sizeof(query), "select * from dbDb"); else sqlSafef(query, sizeof(query), "select * from dbDb where active=1"); struct dbDb *dbList = NULL, *el = NULL; struct sqlResult *sr = sqlGetResult(conn, query); char **row; while ((row = sqlNextRow(sr)) != NULL) {