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