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