57e8819684287a67e5a9030cccacad31a0ce4e68
hiram
  Tue Jul 2 11:03:32 2013 -0700
was missing the Ensembl blue bar nav help for all assemblies with ucscToEnsembl table refs #11114
diff --git src/hg/hgTracks/menu.c src/hg/hgTracks/menu.c
index f211460..ffa4d41 100644
--- src/hg/hgTracks/menu.c
+++ src/hg/hgTracks/menu.c
@@ -125,123 +125,125 @@
 	{
 	int agpStart = winStart - agpItem->chromStart;
 	int agpEnd = agpStart + winEnd - winStart;
 	printEnsemblAnchor(database, archive, agpItem->frag,
                            agpStart, agpEnd, links);
 	}
     }
 agpFragFree(&agpItem);  // the one we maybe used
 }
 
 void printMenuBar()
 /* Put up the menu bar. */
 {
 struct hotLink *link, *links = NULL;
 int i, len;
+struct sqlConnection *conn = hAllocConn(database);
 char *menuStr, buf[4096], uiVars[1024];
 safef(uiVars, sizeof(uiVars), "%s=%u", cartSessionVarName(), cartSessionId(cart));
 
 menuStr = menuBar(cart);
 
 // Create top items in view menu
 safef(buf, sizeof(buf), "../cgi-bin/hgTracks?%s&hgt.psOutput=on", uiVars);
 appendLink(&links, buf, "PDF/PS", "pdfLink", FALSE);
 safef(buf, sizeof(buf), "%s&o=%d&g=getDna&i=mixed&c=%s&l=%d&r=%d&db=%s&%s",
       hgcNameAndSettings(), winStart, chromName, winStart, winEnd, database, uiVars);
 appendLink(&links, buf, "DNA", "dnaLink", FALSE);
 safef(buf, sizeof(buf), "../cgi-bin/hgConvert?hgsid=%d&db=%s", cartSessionId(cart), database);
 appendLink(&links, buf, "in other Genomes (Convert)", "convertMenuLink", FALSE);
 
 // Add link-outs to other dbs as appropriate for this assembly
 if (differentWord(database,"susScr2"))
     {
     /* Print Ensembl anchor for latest assembly of organisms we have
      * supported by Ensembl == if versionString from trackVersion exists */
     char ensVersionString[256], ensDateReference[256];
     ensGeneTrackVersion(database, ensVersionString, ensDateReference, sizeof(ensVersionString));
 
-    if (sameWord(database,"hg19"))
+    if (sqlTableExists(conn, UCSC_TO_ENSEMBL))
+        printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links);
+    else if (sameWord(database,"hg19"))
         {
         printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links);
         }
     else if (sameWord(database,"hg18"))
         {
         printEnsemblAnchor(database, "ncbi36", chromName, winStart, winEnd, &links);
         }
     else if (sameWord(database,"oryCun2") || sameWord(database,"anoCar2") || sameWord(database,"calJac3"))
         {
         printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links);
         }
     else if (ensVersionString[0])
         {
         char *archive = NULL;
         if (ensDateReference[0] && differentWord("current", ensDateReference))
             archive = cloneString(ensDateReference);
         /*  Can we perhaps map from a UCSC random chrom to an Ensembl contig ? */
         if (isUnknownChrom(database, chromName))
             {
             //	which table to check
             char *ctgPos = "ctgPos";
 
             if (sameWord(database,"fr2"))
                 fr2ScaffoldEnsemblLink(archive, &links);
             else if (hTableExists(database, UCSC_TO_ENSEMBL))
                 printEnsemblAnchor(database, archive, chromName, winStart, winEnd, &links);
             else if (hTableExists(database, ctgPos))
                 /* see if we are entirely within a single contig */
                 {
-                struct sqlConnection *conn = hAllocConn(database);
                 struct sqlResult *sr = NULL;
                 char **row = NULL;
                 char query[256];
                 sqlSafef(query, sizeof(query),
                       "select * from %s where chrom = '%s' and chromStart<%u and chromEnd>%u",
                       ctgPos, chromName, winEnd, winStart);
                 sr = sqlGetResult(conn, query);
 
                 int itemCount = 0;
                 struct ctgPos *ctgItem = NULL;
                 while ((row = sqlNextRow(sr)) != NULL)
                     {
                     ctgPosFree(&ctgItem);   // if there is a second one
                     ctgItem = ctgPosLoad(row);
                     ++itemCount;
                     if (itemCount > 1)
                         break;
                     }
                 sqlFreeResult(&sr);
-                hFreeConn(&conn);
                 if (1 == itemCount)
                     {   // verify *entirely* within single contig
                     if ((winEnd <= ctgItem->chromEnd) &&
                         (winStart >= ctgItem->chromStart))
                         {
                         int ctgStart = winStart - ctgItem->chromStart;
                         int ctgEnd = ctgStart + winEnd - winStart;
                         printEnsemblAnchor(database, archive, ctgItem->contig,
                                            ctgStart, ctgEnd, &links);
                         }
                     }
                 ctgPosFree(&ctgItem);   // the one we maybe used
                 }
             }
         else
             {
             printEnsemblAnchor(database, archive, chromName, winStart, winEnd, &links);
             }
         }
     }
+hFreeConn(&conn);
 
 if (sameString(database, "hg18"))
     {
     safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9606&build=previous&CHR=%s&BEG=%d&END=%d",
           skipChr(chromName), winStart+1, winEnd);
     appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
     }
 else if (sameString(database, "hg19"))
     {
     safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9606&CHR=%s&BEG=%d&END=%d",
           skipChr(chromName), winStart+1, winEnd);
     appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
     }
 else if (sameString(database, "mm8"))
     {