84dba0006acf65324bb843abee1e11ad02c0a912
markd
  Sun Jul 5 20:01:10 2020 -0700
some cleanup about hgBlat

diff --git src/hg/hgBlat/hgBlat.c src/hg/hgBlat/hgBlat.c
index 7dfcbf5..87a6b7a 100644
--- src/hg/hgBlat/hgBlat.c
+++ src/hg/hgBlat/hgBlat.c
@@ -292,119 +292,122 @@
     boolean isTrans;	/* Is tranlated to protein? */
     char *host;		/* Name of machine hosting server. */
     char *port;		/* Port that hosts server. */
     char *nibDir;	/* Directory of sequence files. */
     int tileSize;       /* gfServer -tileSize */
     int stepSize;       /* gfServer -stepSize */
     int minMatch;       /* gfServer -minMatch */
     char* dynGenome;    /* genome name for dynamic gfServer  */
     };
 
 char *typeList[] = {"BLAT's guess", "DNA", "protein", "translated RNA", "translated DNA"};
 char *outputList[] = {"hyperlink", "psl", "psl no header"};
 
 int minMatchShown = 0;
 
-static struct serverTable *trackHubServerTable(char *db, boolean isTrans)
-/* Find out if database is a track hub with a blat server */
+static struct serverTable *databaseServerTable(char *db, boolean isTrans)
+/* Load blat table for a database */
 {
-char *host, *port;
-boolean dynamic;
-
-if (!trackHubGetBlatParams(db, isTrans, &host, &port, &dynamic))
-    return NULL;
-
-struct serverTable *st;
-
-AllocVar(st);
-
-st->db = cloneString(db);
-st->genome = cloneString(hGenome(db));
-st->isTrans = isTrans;
-st->host = host; 
-st->port = port;
-struct trackHubGenome *genome = trackHubGetGenome(db);
-st->nibDir = cloneString(genome->twoBitPath);
-char *ptr = strrchr(st->nibDir, '/');
-// we only want the directory name
-if (ptr != NULL)
-    *ptr = 0;
-if (dynamic)
-    st->dynGenome = cloneString(trackHubAssemblyField(db, "genome"));
-return st;
-}
-
-struct serverTable *findServer(char *db, boolean isTrans)
-/* Return server for given database.  Db can either be
- * database name or description. */
-{
-if (trackHubDatabase(db))
-    {
-    struct serverTable *hubSt = trackHubServerTable(db, isTrans);
-    if (hubSt != NULL)
-	return hubSt;
-    errAbort("Cannot get blat server parameters for track hub with database %s\n", db);
-    }
-
-static struct serverTable st;
 struct sqlConnection *conn = hConnectCentral();
 char query[512];
 struct sqlResult *sr;
 char **row;
 char dbActualName[32];
 
 /* If necessary convert database description to name. */
 sqlSafef(query, sizeof(query), "select name from dbDb where name = '%s'", db);
 if (!sqlExists(conn, query))
     {
     sqlSafef(query, sizeof(query), "select name from dbDb where description = '%s'", db);
     if (sqlQuickQuery(conn, query, dbActualName, sizeof(dbActualName)) != NULL)
         db = dbActualName;
     }
 
+struct serverTable *st;
+AllocVar(st);
+
 /* Do a little join to get data to fit into the serverTable and grab
  * dbDb.nibPath too.  check for newer dynamic flag.  sqlSafef doesn't lets us
  * format in comma in field spec, so need to do this in two steps. */
+char *blatServersTbl = "blatServers"; // this can be hack to use another db.table for debugging
 char queryTmpl[512];
-boolean haveDynamic = sqlColumnExists(conn, "blatServers", "dynamic");
+boolean haveDynamic = sqlColumnExists(conn, blatServersTbl, "dynamic");
 safef(queryTmpl, sizeof(queryTmpl), "select dbDb.name, dbDb.description, blatServers.isTrans,"
       "blatServers.host, blatServers.port, dbDb.nibPath %s "
-      "from dbDb,blatServers where blatServers.isTrans = %%d and "
+      "from dbDb, %s blatServers where blatServers.isTrans = %%d and "
       "dbDb.name = '%%s' and dbDb.name = blatServers.db", 
-         (haveDynamic ? ", blatServers.dynamic" : ""));
+      (haveDynamic ? ", blatServers.dynamic" : ""), blatServersTbl);
 sqlSafef(query, sizeof(query), queryTmpl, isTrans, db);
 sr = sqlGetResult(conn, query);
 if ((row = sqlNextRow(sr)) == NULL)
     {
     errAbort("Can't find a server for %s database %s.  Click "
 	     "<A HREF=\"/cgi-bin/hgBlat?%s&command=start&db=%s\">here</A> "
 	     "to reset to default database.",
 	     (isTrans ? "translated" : "DNA"), db,
 	     cartSidUrlString(cart), hDefaultDb());
     }
-st.db = cloneString(row[0]);
-st.genome = cloneString(row[1]);
-st.isTrans = atoi(row[2]);
-st.host = cloneString(row[3]);
-st.port = cloneString(row[4]);
-st.nibDir = hReplaceGbdbSeqDir(row[5], st.db);
+st->db = cloneString(row[0]);
+st->genome = cloneString(row[1]);
+st->isTrans = atoi(row[2]);
+st->host = cloneString(row[3]);
+st->port = cloneString(row[4]);
+st->nibDir = hReplaceGbdbSeqDir(row[5], st->db);
 if (haveDynamic && atoi(row[6]))
-    st.dynGenome = cloneString(db);
+    st->dynGenome = cloneString(db);
 
 sqlFreeResult(&sr);
 hDisconnectCentral(&conn);
-return &st;
+return st;
+}
+
+static struct serverTable *trackHubServerTable(char *db, boolean isTrans)
+/* Load blat table for a hub */
+{
+char *host, *port;
+boolean dynamic;
+
+if (!trackHubGetBlatParams(db, isTrans, &host, &port, &dynamic))
+    errAbort("Cannot get blat server parameters for track hub with database %s", db);
+
+struct serverTable *st;
+AllocVar(st);
+
+st->db = cloneString(db);
+st->genome = cloneString(hGenome(db));
+st->isTrans = isTrans;
+st->host = host; 
+st->port = port;
+struct trackHubGenome *genome = trackHubGetGenome(db);
+st->nibDir = cloneString(genome->twoBitPath);
+char *ptr = strrchr(st->nibDir, '/');
+// we only want the directory name
+if (ptr != NULL)
+    *ptr = 0;
+if (dynamic)
+    st->dynGenome = cloneString(trackHubAssemblyField(db, "genome"));
+return st;
+}
+
+struct serverTable *findServer(char *db, boolean isTrans)
+/* Return server for given database.  Db can either be
+ * database name or description. */
+{
+if (trackHubDatabase(db))
+    return trackHubServerTable(db, isTrans);
+else
+    return databaseServerTable(db, isTrans);
 }
 
 void findClosestServer(char **pDb, char **pOrg)
 /* If db doesn't have a blat server, look for the closest db (or org) that has one,
  * as hgPcr does. */
 {
 char *db = *pDb, *org = *pOrg;
 
 if (trackHubDatabase(db) && (trackHubServerTable(db, FALSE) != NULL))
     {
     *pDb = db;
     *pOrg = hGenome(db);
     return;
     }