d947dcc75b04fd0dc921c0eb02ed988d7b4819f0 braney Mon Jun 30 16:00:56 2025 -0700 let genark hubs appear in hgConvert if we can figure out their UCSC org diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c index be2d9ceb980..b381d3e0df5 100644 --- src/hg/lib/hdb.c +++ src/hg/lib/hdb.c @@ -353,30 +353,38 @@ struct sqlConnection *conn = hConnectCentral(); char buf[128]; char query[256]; sqlSafef(query, sizeof(query), "select name from %s where name = '%s'",dbDbTable(), database); boolean res = (sqlQuickQuery(conn, query, buf, sizeof(buf)) != NULL); if (res) { // this is done instead of sqlDatabaseExists() since it uses the cache, // which will recycle free connections for new databases struct sqlConnection *conn2 = hAllocConnMaybe(database); res = (conn2 != NULL); hFreeConn(&conn2); } hDisconnectCentral(&conn); + +#ifdef NTONOW +if ((res == FALSE) && cfgOptionBooleanDefault("genarkLiftOver", FALSE)) + { + if (genarkUrl(database) != NULL) + res = TRUE; + } +#endif hashAddInt(dbsChecked, database, res); return res; } boolean hDbIsActive(char *database) /* Function to check if this is a valid and active db name */ { static struct hash *dbsChecked = NULL; if (dbsChecked) { void *hashDb = hashFindVal(dbsChecked, database); if (hashDb) return(hashIntVal(dbsChecked, database)); } @@ -2580,31 +2588,35 @@ char *res = NULL; sqlSafef(query, sizeof(query), "select %s from %s where name = '%s'", field, dbDbTable(), database); if (sqlQuickQuery(conn, query, buf, sizeof(buf)) != NULL) res = cloneString(buf); hDisconnectCentral(&conn); return res; } char *hDbDbOptionalField(char *database, char *field) /* Look up in the regular central database. */ { -if (trackHubDatabase(database) && !hubConnectIsCurated(trackHubSkipHubName(database))) +boolean isGenark = FALSE; +//if (genarkUrl(database) != NULL) +// isGenark = TRUE; + +if (isGenark || (trackHubDatabase(database) && !hubConnectIsCurated(trackHubSkipHubName(database)))) { // In dbDb the genome field is the name of the organism, but // genome is the name of the assembly in track hubs. // Since we're called from dbDb aware code, we map a request // for the field "genome" to "organism" if (sameString(field, "genome")) field = "organism"; return trackHubAssemblyField(database, field); } char *res = hCentralDbDbOptionalField(trackHubSkipHubName(database), field); return res; } @@ -4956,51 +4968,66 @@ } struct dbDb *hGetLiftOverToDatabases(char *fromDb) /* Get list of databases for which there are liftOver chain files * to convert from the fromDb assembly. * Dispose of this with dbDbFreeList. */ { struct dbDb *allDbList = NULL, *liftOverDbList = NULL, *dbDb, *nextDbDb; struct liftOverChain *chainList = NULL, *chain; struct hash *hash = newHash(0); struct hash *dbNameHash = newHash(3); /* Get list of all liftOver chains in central database */ chainList = liftOverChainListForDbFiltered(fromDb); +struct dyString *dy = newDyString(4096); /* Create hash of databases having liftOver chains from the fromDb */ for (chain = chainList; chain != NULL; chain = chain->next) if (sameString(chain->fromDb,fromDb)) + { hashAdd(hash, chain->toDb, chain->toDb); + if (startsWith("GC", chain->toDb)) + { + dyStringPrintf(dy, "'%s',", chain->toDb); + } + } /* Get list of all current databases */ allDbList = hDbDbListDeadOrAlive(); /* Create a new dbDb list of all entries in the liftOver hash */ for (dbDb = allDbList; dbDb != NULL; dbDb = nextDbDb) { nextDbDb = dbDb->next; if (hashFindVal(hash, dbDb->name) && !hashFindVal(dbNameHash, dbDb->name)) { slAddHead(&liftOverDbList, dbDb); /* to avoid duplicates in the returned list. */ hashAdd(dbNameHash, dbDb->name, dbDb->name); } else dbDbFree(&dbDb); } + +if (cfgOptionBooleanDefault("genarkLiftOver", FALSE) && (strlen(dy->string) > 0)) + { + dy->string[strlen(dy->string) - 1] = 0; + struct dbDb *genarkDbDbs = genarkLiftOverDbs(dy->string); + liftOverDbList = slCat(genarkDbDbs, liftOverDbList); + } + hashFree(&hash); liftOverChainFreeList(&chainList); /* sort by orderKey so that assemblies always appear from most recent */ /* to the oldest assemblies in the dropdown menu for toDbs */ slSort(&liftOverDbList, hDbDbCmpOrderKey); return liftOverDbList; } struct dbDb *hGetBlatIndexedDatabases() /* Get list of databases for which there is a BLAT index. * Dispose of this with dbDbFreeList. */ { struct hash *hash=newHash(5); struct sqlConnection *conn = hConnectCentral();