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