fd532108ac0d9e35b8fe6087e86e84a0e073eae3
hiram
  Wed May 8 12:08:40 2019 -0700
for list/ucscGenomes function only show active=1 genomes by default with hidden option showActive0=on to allow show of active=0 genomes refs #18869

diff --git src/hg/hubApi/apiUtils.c src/hg/hubApi/apiUtils.c
index 06da9fa..3aec27e 100644
--- src/hg/hubApi/apiUtils.c
+++ src/hg/hubApi/apiUtils.c
@@ -423,15 +423,47 @@
 	}
     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 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);
+}
+
+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)
+    {
+    el = dbDbLoad(row);
+    slAddHead(&dbList, el);
+    }
+sqlFreeResult(&sr);
+hDisconnectCentral(&conn);
+slSort(&dbList, dbDbCmpName);
+return dbList;
+}