c3dd5de7e5d48bc68be3fc18dacf99999a3891f8 tdreszer Wed Mar 2 13:09:32 2011 -0800 Back out change to one function which introduced a bug diff --git src/hg/lib/mdb.c src/hg/lib/mdb.c index ed54543..72eb732 100644 --- src/hg/lib/mdb.c +++ src/hg/lib/mdb.c @@ -2988,31 +2988,31 @@ dyStringPrintf(dyQuery,"select distinct val"); dyStringPrintf(dyQuery," from %s l1 where l1.var='%s' ",tableName,var); if (!tables || !files) dyStringPrintf(dyQuery,"and exists (select l2.obj from %s l2 where l2.obj = l1.obj and l2.var='objType' and l2.val='%s')", tableName,tables?"table":"file"); dyStringAppend(dyQuery," order by val"); retVal = sqlQuickList(conn, dyStringCannibalize(&dyQuery)); slNameSortCase(&retVal); return retVal; } // TODO: decide to make this public or hide it away inside the one function so far that uses it. -//static struct hash *cvHash = NULL; +static struct hash *cvHash = NULL; static char *cv_file() // return default location of cv.ra { static char filePath[PATH_LEN]; char *root = hCgiRoot(); if (root == NULL || *root == 0) root = "/usr/local/apache/cgi-bin/"; // Make this check out sandboxes? // root = "/cluster/home/tdreszer/kent/src/hg/makeDb/trackDb/cv/alpha/"; // Make this check out sandboxes? safef(filePath, sizeof(filePath), "%s/encode/cv.ra", root); if(!fileExists(filePath)) errAbort("Error: can't locate cv.ra; %s doesn't exist\n", filePath); return filePath; } struct slPair *mdbValLabelSearch(struct sqlConnection *conn, char *var, int limit, boolean tables, boolean files) @@ -3027,53 +3027,55 @@ struct dyString *dyQuery = dyStringNew(512); if (limit > 0) dyStringPrintf(dyQuery,"select distinct LEFT(val,%d)",limit); else dyStringPrintf(dyQuery,"select distinct val"); dyStringPrintf(dyQuery," from %s l1 where l1.var='%s' ",tableName,var); if (!tables || !files) dyStringPrintf(dyQuery,"and exists (select l2.obj from %s l2 where l2.obj = l1.obj and l2.var='objType' and l2.val='%s')", tableName,tables?"table":"file"); dyStringAppend(dyQuery," order by val"); // Establish cv hash -struct hash *varHash = mdbCvTermHash(var); +if (cvHash == NULL) + cvHash = raReadAll(cgiUsualString("ra", cv_file()), "term"); struct slPair *pairs = NULL, *pair; struct sqlResult *sr = sqlGetResult(conn, dyStringContents(dyQuery)); dyStringFree(&dyQuery); char **row; +struct hash *ra = NULL; while ((row = sqlNextRow(sr)) != NULL) { AllocVar(pair); char *name = cloneString(row[0]); pair = slPairNew(name,name); // defaults the label to the metaDb.val - struct hash *valHash = hashFindVal(varHash,name); - if (valHash == NULL && sameString(var,"lab")) // FIXME: ugly special case to be removed when metaDb is cleaned up! + ra = hashFindVal(cvHash,name); + if (ra == NULL && sameString(var,"lab")) // FIXME: ugly special case to be removed when metaDb is cleaned up! { char *val = cloneString(name); - valHash = hashFindVal(varHash,strUpper(val)); - if (valHash == NULL) - valHash = hashFindVal(varHash,strLower(val)); + ra = hashFindVal(cvHash,strUpper(val)); + if (ra == NULL) + ra = hashFindVal(cvHash,strLower(val)); freeMem(val); } - if (valHash != NULL) + if (ra != NULL) { - char *label = hashFindVal(valHash,"label"); + char *label = hashFindVal(ra,"label"); if (label != NULL) { freeMem(pair->name); // Allocated when pair was created pair->name = strSwapChar(cloneString(label),'_',' '); // vestigial _ meaning space if (limit > 0 && strlen(pair->name) > limit) pair->name[limit] = '\0'; } } slAddHead(&pairs, pair); } sqlFreeResult(&sr); slPairSortCase(&pairs); return pairs; }