da70dd33addc56f2037a19acd557a647e09554e8 tdreszer Tue Mar 15 09:33:03 2011 -0700 Needed special case of searchability for composite, since it is not directly searchable but IS indirectly diff --git src/hg/lib/mdb.c src/hg/lib/mdb.c index ac0abd2..09b2d24 100644 --- src/hg/lib/mdb.c +++ src/hg/lib/mdb.c @@ -2909,30 +2909,32 @@ // Search the metaDb table for objs by var,val pairs. Uses mdbCvSearchMethod() if available. // This method will use mdbObjsQueryByVars() { struct slPair *onePair; struct dyString *dyTerms = dyStringNew(256); // Build list of terms as "var1=val1 var2=val2a,val2b,val2c var3=%val3%" for(onePair = varValPairs; onePair != NULL; onePair = onePair->next) { if (isEmpty(((char *)(onePair->val)))) // NOTE: All the commas are needed to get the macro to do the right thing continue; enum mdbCvSearchable searchBy = mdbCvSearchMethod(onePair->name); if (searchBy == cvsSearchBySingleSelect || searchBy == cvsSearchByMultiSelect) // multiSelect val will be filled with a comma delimited list dyStringPrintf(dyTerms,"%s=%s ",onePair->name,(char *)onePair->val); else if (searchBy == cvsSearchByFreeText) // If select is by free text then like dyStringPrintf(dyTerms,"%s=%%%s%% ",onePair->name,(char *)onePair->val); + else if (sameWord(onePair->name,"composite")) // special case. Not directly searchable by UI but indirectly and will show up here. + dyStringPrintf(dyTerms,"%s=%s ",onePair->name,(char *)onePair->val); else if (searchBy == cvsSearchByDateRange || searchBy == cvsSearchByIntegerRange) { // TO BE IMPLEMENTED // Requires new mdbObjSearch API and more than one (char *)onePair->val warn("mdb search by date or number is not yet implemented."); } } // Be sure to include table or file in selections if (tables) dyStringAppend(dyTerms,"objType=table "); if (files) dyStringAppend(dyTerms,"fileName=? "); // Build the mdbByVals struct and then select all mdbObjs in one query struct mdbByVar *mdbByVars = mdbByVarsLineParse(dyStringContents(dyTerms));