a9c9cf2828c124535a1562f709bd4437b1bf60a2
braney
  Mon Jun 22 16:41:31 2020 -0700
starting on making hgGene use and external database for the know* tables

diff --git src/hg/hgGene/hgGene.c src/hg/hgGene/hgGene.c
index f2967e3..6ab1ab3 100644
--- src/hg/hgGene/hgGene.c
+++ src/hg/hgGene/hgGene.c
@@ -707,58 +707,63 @@
 else if (cartVarExists(cart, hggDoTxInfoDescription))
     doTxInfoDescription();
 else
     {
     struct sqlConnection *conn = NULL;
     char *geneName = cartUsualString(cart, hggGene, NULL);
     if (isEmpty(geneName))
 	{
 	// Silly googlebots.
 	hUserAbort("Error: the hgg_gene parameter is missing from the cart and the CGI params.");
 	}
 
     /* if kgProtMap2 table exists, this means we are doing KG III */
     if (hTableExists(database, "kgProtMap2")) kgVersion = KG_III;
 
+    char *tableName = cartUsualString(cart, hggType, NULL);
+    struct trackDb *tdb = hTrackDbForTrack(database, tableName);
+    char *externalDb = trackDbSetting(tdb, "externalDb");
+    if (externalDb != NULL)
+        conn = hAllocConn(externalDb);
+    else
         conn = hAllocConn(database);
     curGeneId = findGeneId(conn, geneName);
     getGenePosition(conn);
     curGenePred = getCurGenePred(conn);
     curGeneName = getGeneName(curGeneId, conn);
     spConn = hAllocConn(UNIPROT_DB_NAME);
     swissProtAcc = getSwissProtAcc(conn, spConn, curGeneId);
 
     if (isRgdGene(conn)) swissProtAcc=getRgdGeneUniProtAcc(curGeneId, conn);
     /* Check command variables, and do the ones that
      * don't want to put up the hot link bar etc. */
     if (cartVarExists(cart, hggDoGetMrnaSeq))
 	doGetMrnaSeq(conn, curGeneId, curGeneName);
     else if (cartVarExists(cart, hggDoWikiTrack))
 	doWikiTrack(conn);
     else if (cartVarExists(cart, hggDoGetProteinSeq))
 	doGetProteinSeq(conn, curGeneId, curGeneName);
     else if (cartVarExists(cart, hggDoRnaFoldDisplay))
 	doRnaFoldDisplay(conn, curGeneId, curGeneName);
     else if (cartVarExists(cart, hggDoOtherProteinSeq))
 	doOtherProteinSeq(conn, curGeneName);
     else if (cartVarExists(cart, hggDoOtherProteinAli))
 	doOtherProteinAli(conn, curGeneId, curGeneName);
     else
 	{
 	/* Default case - start fancy web page. */
 	measureTiming =  isNotEmpty(cartOptionalString(cart, "measureTiming"));
-        struct trackDb *tdb = hTrackDbForTrack(database, genomeSetting("knownGene"));
         isGencode = trackDbSettingOn(tdb, "isGencode");
         isGencode2 = trackDbSettingOn(tdb, "isGencode2");
 	cartWebStart(cart, database, "%s Gene %s (%s) Description and Page Index",
 	    genome, curGeneName, isGencode2 ? curGeneId : curAlignId);
 	webMain(conn, tdb);
 	cartWebEnd();
 	}
     hFreeConn(&spConn);
     hFreeConn(&conn);
     }
 cartRemovePrefix(cart, hggDoPrefix);
 }
 
 char *excludeVars[] = {"Submit", "submit", "ajax", hggAjaxSection, NULL};