6823728f16334d9b53bd595688c8f5780cf833fe braney Sun Feb 16 12:13:13 2025 -0800 ongoing work on quickLift. Added support for SQL beds diff --git src/hg/lib/hubConnect.c src/hg/lib/hubConnect.c index 475d5d82ee4..ac3cb827f49 100644 --- src/hg/lib/hubConnect.c +++ src/hg/lib/hubConnect.c @@ -125,31 +125,31 @@ firstOne = FALSE; else dyStringAppendC(trackHubs, ' '); dyStringAppend(trackHubs, hubVar->name + prefixLength); } } slPairFreeList(&hubVarList); // now see if we should quicklift any hubs struct sqlConnection *conn = hConnectCentral(); char query[2048]; hubVarList = cartVarsWithPrefix(cart, "quickLift"); for (hubVar = hubVarList; hubVar != NULL; hubVar = hubVar->next) { unsigned hubNumber = atoi(hubVar->name + sizeof("quickLift")); - sqlSafef(query, sizeof(query), "select path from exportedDataHubs where id='%d'", hubNumber); + sqlSafef(query, sizeof(query), "select hubUrl from hubStatus where id='%d'", hubNumber); char *hubUrl = sqlQuickString(conn, query); char *errorMessage; unsigned hubId = hubFindOrAddUrlInStatusTable(cart, hubUrl, &errorMessage); if (firstOne) firstOne = FALSE; else dyStringAppendC(trackHubs, ' '); dyStringPrintf(trackHubs, "%d:%s", hubId,(char *)hubVar->val); } hDisconnectCentral(&conn); cartSetString(cart, hubConnectTrackHubsVarName, trackHubs->string); dyStringFree(&trackHubs); cartRemove(cart, hgHubConnectRemakeTrackHub); @@ -295,64 +295,66 @@ continue; int id = hubIdFromCartName(pair->name); hub = hubConnectStatusForId(conn, id); if (hub != NULL) { slAddHead(&hubList, hub); } } slFreeList(&pairList); hDisconnectCentral(&conn); slReverse(&hubList); return hubList; } -struct hubConnectStatus *hubConnectStatusListFromCart(struct cart *cart) +struct hubConnectStatus *hubConnectStatusListFromCart(struct cart *cart, char *db) /* Return list of track hubs that are turned on by user in cart. */ { -struct hubConnectStatus *hubList = NULL, *hub = NULL; +struct hubConnectStatus *hubList = NULL; struct slName *name, *nameList = hubConnectHubsInCart(cart); struct sqlConnection *conn = hConnectCentral(); for (name = nameList; name != NULL; name = name->next) { // items in trackHub statement may need to be quickLifted. This is implied // by the hubStatus id followed by a colon and then a index into the quickLiftChain table + struct hubConnectStatus *hub = NULL; char *copy = cloneString(name->name); char *colon = strchr(copy, ':'); if (colon) *colon++ = 0; int id = sqlSigned(copy); if (colon == NULL) // not quickLifted hub = hubConnectStatusForId(conn, id); else { char query[4096]; sqlSafef(query, sizeof(query), "select fromDb, toDb, path from %s where id = \"%s\"", "quickLiftChain", colon); struct sqlResult *sr = sqlGetResult(conn, query); char **row; char *replaceDb = NULL; char *quickLiftChain = NULL; char *toDb = NULL; while ((row = sqlNextRow(sr)) != NULL) { replaceDb = cloneString(row[0]); toDb = cloneString(row[1]); quickLiftChain = cloneString(row[2]); break; // there's only one } sqlFreeResult(&sr); + if (sameOk(toDb, hubConnectSkipHubPrefix(db))) hub = hubConnectStatusForIdExt(conn, id, replaceDb, toDb, quickLiftChain); } if (hub != NULL) { if (!isEmpty(hub->errorMessage) && (strstr(hub->hubUrl, "hgComposite") != NULL)) { // custom collection hub has disappeared. Remove it from cart cartSetString(cart, hgHubConnectRemakeTrackHub, "on"); char buffer[1024]; safef(buffer, sizeof buffer, "hgHubConnect.hub.%d", id); cartRemove(cart, buffer); } else slAddHead(&hubList, hub); } @@ -1339,35 +1341,35 @@ char *hubConnectLoadHubs(struct cart *cart) /* load the track data hubs. Set a static global to remember them */ { char *dbSpec = asmAliasFind(cartOptionalString(cart, "db")); char *curatedHubPrefix = getCuratedHubPrefix(); if (dbSpec != NULL) lookForCuratedHubs(cart, trackHubSkipHubName(dbSpec), curatedHubPrefix); char *newDatabase = checkForNew( cart); newDatabase = asmAliasFind(newDatabase); cartSetString(cart, hgHubConnectRemakeTrackHub, "on"); portHubStatus(cart); -struct hubConnectStatus *hubList = hubConnectStatusListFromCart(cart); +struct hubConnectStatus *hubList = hubConnectStatusListFromCart(cart, dbSpec); char *genarkPrefix = cfgOption("genarkHubPrefix"); if (genarkPrefix && lookForLonelyHubs(cart, hubList, &newDatabase, genarkPrefix)) - hubList = hubConnectStatusListFromCart(cart); + hubList = hubConnectStatusListFromCart(cart, dbSpec); globalHubList = hubList; return newDatabase; } char *hubNameFromUrl(char *hubUrl) /* Given the URL for a hub, return its hub_# name. */ { if (hubUrl == NULL) return NULL; char query[PATH_LEN*4]; sqlSafef(query, sizeof(query), "select concat('hub_', id) from %s where hubUrl = '%s'", getHubStatusTableName(), hubUrl);