feeb6019339b80b90124476e6303e8dffb0f5f0b
markd
  Sat Oct 29 14:59:04 2022 -0700
Compute versione table names rather then get them from trackDb.  I have no idea why I did it this way, but it causes problems because a table was missing

diff --git src/hg/hgc/gencodeClick.c src/hg/hgc/gencodeClick.c
index 10e02c5..948f754 100644
--- src/hg/hgc/gencodeClick.c
+++ src/hg/hgc/gencodeClick.c
@@ -58,47 +58,49 @@
 static char *apprisHomeUrl = "https://appris.bioinfo.cnio.es/#/";
 static char *apprisGeneUrl = "https://appris.bioinfo.cnio.es/#/database/id/%s/%s?sc=ensembl";
 
 static char* UNKNOWN = "unknown";
 
 static char *getBaseAcc(char *acc, char *accBuf, int accBufSize)
 /* get the accession with version number dropped. */
 {
 safecpy(accBuf, accBufSize, acc);
 char *dot = strchr(accBuf, '.');
 if (dot != NULL)
     *dot = '\0';
 return accBuf;
 }
 
-static bool haveGencodeTable(struct trackDb *tdb, char *tableBase)
-/* determine if table is in settings and thus in this gencode release */
+static char* getGencodeVersion(struct trackDb *tdb)
+/* get the GENCODE version */
 {
-return trackDbSetting(tdb, tableBase) != NULL;
+return trackDbRequiredSetting(tdb, "wgEncodeGencodeVersion");
 }
 
 static char *getGencodeTable(struct trackDb *tdb, char *tableBase)
-/* get a table name from the settings. */
+/* Return the table name with the version attached.  This just leaks the memory
+ * and lets exit() clean up.  It is tiny */
 {
-return trackDbRequiredSetting(tdb, tableBase);
+char table[64];
+safef(table, sizeof(table), "%sV%s", tableBase, getGencodeVersion(tdb));
+return cloneString(table);
 }
 
-static char* getGencodeVersion(struct trackDb *tdb)
-/* get the GENCODE version or NULL for < V7, which is not supported
- * by this module. */
+static bool haveGencodeTable(struct sqlConnection *conn, struct trackDb *tdb, char *tableBase)
+/* determine if a gencode table exists; it might be option or not in older releases */
 {
-return trackDbSetting(tdb, "wgEncodeGencodeVersion");
+return sqlTableExists(conn, getGencodeTable(tdb, tableBase));
 }
 
 static boolean isGrcH37Native(struct trackDb *tdb)
 /* Is this GENCODE GRCh37 native build, which requires a different Ensembl site. */
 {
 // check for non-lifted GENCODE on GRCh37/hg19
 if (sameString(database, "hg19"))
     return stringIn("lift37", getGencodeVersion(tdb)) == NULL;
 else
     return FALSE;
 }
 
 static boolean isFakeGeneSymbol(char* sym)
 /* is this a static gene symbol? */
 {
@@ -830,46 +832,46 @@
             printf("<td width=\"33.33%%\">");
         }
     printf("</tr>\n");
     rowCnt++;
     }
 printf("</tbody></table>\n");
 }
 
 static void doGencodeGeneTrack(struct trackDb *tdb, char *gencodeId, struct sqlConnection *conn, struct genePred *transAnno)
 /* Process click on a GENCODE gene annotation track. */
 {
 struct wgEncodeGencodeAttrs *transAttrs = transAttrsLoad(tdb, conn, gencodeId);
 char *gencodeGeneId = transAttrs->geneId;
 struct wgEncodeGencodeGeneSource *geneSource = metaDataLoad(tdb, conn, gencodeGeneId, "wgEncodeGencodeGeneSource", "geneId", sqlQuerySingle, (sqlLoadFunc)wgEncodeGencodeGeneSourceLoad);
 struct wgEncodeGencodeTranscriptSource *transcriptSource = metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeTranscriptSource", "transcriptId", sqlQuerySingle, (sqlLoadFunc)wgEncodeGencodeTranscriptSourceLoad);
-bool haveRemarks = haveGencodeTable(tdb, "wgEncodeGencodeAnnotationRemark");
+bool haveRemarks = haveGencodeTable(conn, tdb, "wgEncodeGencodeAnnotationRemark");
 struct wgEncodeGencodeAnnotationRemark *remarks = haveRemarks ? metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeAnnotationRemark", "transcriptId", 0, (sqlLoadFunc)wgEncodeGencodeAnnotationRemarkLoad) : NULL;
 struct wgEncodeGencodePdb *pdbs = metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodePdb", "transcriptId", sqlQueryMulti, (sqlLoadFunc)wgEncodeGencodePdbLoad);
 struct wgEncodeGencodePubMed *pubMeds = metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodePubMed", "transcriptId", sqlQueryMulti, (sqlLoadFunc)wgEncodeGencodePubMedLoad);
-bool haveEntrezGene = haveGencodeTable(tdb, "wgEncodeGencodeEntrezGene");
+bool haveEntrezGene = haveGencodeTable(conn, tdb, "wgEncodeGencodeEntrezGene");
 struct wgEncodeGencodeEntrezGene *entrezGenes = haveEntrezGene ? metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeEntrezGene", "transcriptId", sqlQueryMulti, (sqlLoadFunc)wgEncodeGencodeEntrezGeneLoad) : NULL;
 struct wgEncodeGencodeRefSeq *refSeqs = metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeRefSeq", "transcriptId", sqlQueryMulti, (sqlLoadFunc)wgEncodeGencodeRefSeqLoad);
 struct wgEncodeGencodeTag *tags = metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeTag", "transcriptId", sqlQueryMulti, (sqlLoadFunc)wgEncodeGencodeTagLoad);
 struct wgEncodeGencodeTranscriptSupport *transcriptSupports = metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeTranscriptSupport", "transcriptId", sqlQueryMulti, (sqlLoadFunc)wgEncodeGencodeTranscriptSupportLoad);
 struct wgEncodeGencodeExonSupport *exonSupports = NULL;
 // exonSupports not available in back mapped GENCODE releases
-if (haveGencodeTable(tdb, "wgEncodeGencodeExonSupport"))
+if (haveGencodeTable(conn, tdb, "wgEncodeGencodeExonSupport"))
     exonSupports = metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeExonSupport", "transcriptId", sqlQueryMulti, (sqlLoadFunc)wgEncodeGencodeExonSupportLoad);
 struct wgEncodeGencodeUniProt *uniProts = metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeUniProt", "transcriptId", sqlQueryMulti, (sqlLoadFunc)wgEncodeGencodeUniProtLoad);
 slSort(&uniProts, uniProtDatasetCmp);
-bool haveTsl = haveGencodeTable(tdb, "wgEncodeGencodeTranscriptionSupportLevel");
+bool haveTsl = haveGencodeTable(conn, tdb, "wgEncodeGencodeTranscriptionSupportLevel");
 struct wgEncodeGencodeTranscriptionSupportLevel *tsl = haveTsl ? metaDataLoad(tdb, conn, gencodeId, "wgEncodeGencodeTranscriptionSupportLevel", "transcriptId", 0, (sqlLoadFunc)wgEncodeGencodeTranscriptionSupportLevelLoad) : NULL;
 
 int geneChromStart, geneChromEnd;
 getGeneBounds(tdb, conn, transAnno, &geneChromStart, &geneChromEnd);
 
 char title[256];
 safef(title, sizeof(title), "GENCODE V%s Transcript Annotation", getGencodeVersion(tdb));
 char header[256];
 safef(header, sizeof(header), "%s %s", title, gencodeId);
 if (!isEmpty(transAttrs->geneName))
     safef(header, sizeof(header), "%s %s (%s)", title, gencodeId, transAttrs->geneName);
 else
     safef(header, sizeof(header), "%s %s", title, gencodeId);
 cartWebStart(cart, database, "%s", header);
 printf("<H2>%s</H2>\n", header);
@@ -944,17 +946,17 @@
 else
     errAbort("doGencodeGene: track not handled: \"%s\"", tdb->track);
 
 htmlHorizontalLine();
 printTrackHtml(tdb);
 
 genePredFreeList(&anno);
 hFreeConn(&conn);
 }
 
 
 bool isNewGencodeGene(struct trackDb *tdb)
 /* is this a new-style gencode (>= V7) track, as indicated by
  * the presence of the wgEncodeGencodeVersion setting */
 {
-return getGencodeVersion(tdb) != NULL;
+return trackDbSetting(tdb, "wgEncodeGencodeVersion") != NULL;
 }