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 " "here " "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; }