b4513e3f7e7f904bd91b4c8029edc10ffb7e28ad
larrym
  Thu Oct 21 16:31:38 2010 -0700
handle invalid metaDb values when switching assemblies
diff --git src/hg/hgTracks/searchTracks.c src/hg/hgTracks/searchTracks.c
index c9c50e7..21d567b 100644
--- src/hg/hgTracks/searchTracks.c
+++ src/hg/hgTracks/searchTracks.c
@@ -274,9 +274,9 @@
 int numMetadataSelects = 0;
 char **mdbVar = NULL;
 char **mdbVal = NULL;
-int i, count;
 char **mdbVars = NULL;
 char **mdbVarLabels = NULL;
+int i, count = metaDbVars(conn, &mdbVars, &mdbVarLabels);
 
 for(;;)
     {
@@ -313,13 +313,26 @@
             offset = 1;
         safef(buf, sizeof(buf), "%s%d", METADATA_NAME_PREFIX, i + offset);
         mdbVar[i] = cloneString(cartOptionalString(cart, buf));
-        // XXXX we need to make sure mdbVar[i] is valid in this assembly
         if(!simpleSearch)
             {
+            int j;
+            boolean found = FALSE;
+            // We need to make sure mdbVar[i] is valid in this assembly; if it isn't, reset it to "cell".
+            for(j = 0; j < count && !found; j++)
+                if(sameString(mdbVars[j], mdbVar[i]))
+                    found = TRUE;
+            if(found)
+                {
             safef(buf, sizeof(buf), "%s%d", METADATA_VALUE_PREFIX, i + offset);
             mdbVal[i] = cloneString(cartOptionalString(cart, buf));
             if(sameString(mdbVal[i], ANYLABEL))
                 mdbVal[i] = NULL;
+                }
+            else
+                {
+                mdbVar[i] = cloneString("cell");
+                mdbVal[i] = NULL;
+                }
             if(!isEmpty(mdbVal[i]))
                 (*numMetadataNonEmpty)++;
             }
@@ -345,8 +358,6 @@
     mdbVal[1] = ANYLABEL;
     }
 
-count = metaDbVars(conn, &mdbVars,&mdbVarLabels);
-
 hPrintf("<tr><td colspan='%d' align='right' class='lineOnTop' style='height:20px; max-height:20px;'><em style='color:%s; width:200px;'>ENCODE terms</em></td></tr>", cols,COLOR_DARKGREY);
 for(i = 0; i < numMetadataSelects; i++)
     {