d58aec2ee04b5a1d5004b30a04696df4741c5023
braney
  Tue May 11 17:04:04 2021 -0700
check to make sure genark table exists before using it.

diff --git src/hg/lib/hubConnect.c src/hg/lib/hubConnect.c
index 81e2bf3..970d5bb 100644
--- src/hg/lib/hubConnect.c
+++ src/hg/lib/hubConnect.c
@@ -41,30 +41,44 @@
     hubStatusTableName = cfgOptionEnvDefault("HGDB_HUB_STATUS_TABLE",
 	    hubStatusTableConfVariable, defaultHubStatusTableName);
 
 return hubStatusTableName;
 }
 
 char *hubPublicTableName()
 /* Get the name of the table that lists public hubs.  Don't free the result. */
 {
 if (_hubPublicTableName == NULL)
     _hubPublicTableName = cfgOptionEnvDefault("HGDB_HUB_PUBLIC_TABLE", hubPublicTableConfVariable,
                                              defaultHubPublicTableName);
 return _hubPublicTableName;
 }
 
+static char *_genArkTableName = NULL;
+
+static char *genArkTableName()
+/* return the genark table name from the environment, 
+ * or hg.conf, or use the default.  Cache the result */
+{
+if (_genArkTableName == NULL)
+    _genArkTableName = cfgOptionEnvDefault("HGDB_GENARK_STATUS_TABLE",
+	    genArkTableConfVariable, defaultGenArkTableName);
+
+return _genArkTableName;
+}
+
+
 boolean hubConnectTableExists()
 /* Return TRUE if the hubStatus table exists. */
 {
 struct sqlConnection *conn = hConnectCentral();
 boolean exists = sqlTableExists(conn, getHubStatusTableName());
 hDisconnectCentral(&conn);
 return exists;
 }
 
 void hubConnectStatusFree(struct hubConnectStatus **pHub)
 /* Free hubConnectStatus */
 {
 struct hubConnectStatus *hub = *pHub;
 if (hub != NULL)
     {
@@ -880,56 +894,59 @@
 if (genome == NULL)
     return FALSE;
 
 struct trackHub *trackHub = genome->trackHub;
 
 if ((trackHub != NULL) && (trackHub->hubStatus != NULL))
     return trackHub->hubStatus->id;
 return 0;
 }
 
 static boolean lookForLonelyHubs(struct cart *cart, struct hubConnectStatus  *hubList, char **newDatabase, char *genarkPrefix)
 // We go through the hubs and see if any of them reference an assembly
 // that is NOT currently loaded, but we know a URL to load it.
 {
 struct sqlConnection *conn = hConnectCentral();
+if (!sqlTableExists(conn, genArkTableName()))
+    return FALSE;
+
 boolean added = FALSE;
 
 struct hubConnectStatus  *hub;
 for(hub = hubList; hub; hub = hub->next)
     {
     struct trackHub *tHub = hub->trackHub;
     if (tHub == NULL)
         continue;
 
     struct trackHubGenome *genomeList = tHub->genomeList, *genome;
 
     for(genome = genomeList; genome; genome = genome->next)
         {
         char *name = genome->name;
 
         if (!hDbIsActive(name) )
             {
             char buffer[4096];
             unsigned newId = 0;
 
             // look with undecorated name for an attached assembly hub
             if (!(newId = lookForUndecoratedDb(name)))
                 {
                 // see if genark has this assembly
                 char query[4096];
-                sqlSafef(query, sizeof query, "select hubUrl from genark where gcAccession='%s'", name);
+                sqlSafef(query, sizeof query, "select hubUrl from %s where gcAccession='%s'", genArkTableName(), name);
                 if (sqlQuickQuery(conn, query, buffer, sizeof buffer))
                     {
                     char url[4096];
                     safef(url, sizeof url, "%s/%s", genarkPrefix, buffer);
 
                     struct hubConnectStatus *status = getAndSetHubStatus( cart, url, TRUE);
 
                     if (status)
                         {
                         newId = status->id;
                         added = TRUE;
                         }
                     }
                 }