cc0d4fbe350c677615093d99d03ae8c05de11914 tdreszer Mon Sep 12 16:21:10 2011 -0700 Spaces in freeText search were not safe. Redmine 5250. diff --git src/hg/lib/mdb.c src/hg/lib/mdb.c index 5c00900..d596093 100644 --- src/hg/lib/mdb.c +++ src/hg/lib/mdb.c @@ -3113,31 +3113,31 @@ for(onePair = varValPairs; onePair != NULL; onePair = onePair->next) { if (isEmpty(((char *)(onePair->val)))) // NOTE: All the parens are needed to get the macro to do the right thing continue; enum cvSearchable searchBy = cvSearchMethod(onePair->name); if (searchBy == cvSearchByMultiSelect // multiSelect val will be filled with a comma delimited list || searchBy == cvSearchBySingleSelect || searchBy == cvSearchByWildList) { if (strchr((char *)onePair->val,' ')) dyStringPrintf(dyTerms,"%s=\"%s\" ",onePair->name,(char *)onePair->val); else dyStringPrintf(dyTerms,"%s=%s ",onePair->name,(char *)onePair->val); } else if (searchBy == cvSearchByFreeText) // If select is by free text then like - dyStringPrintf(dyTerms,"%s=%%%s%% ",onePair->name,(char *)onePair->val); + dyStringPrintf(dyTerms,"%s=\"%%%s%%\" ",onePair->name,(char *)onePair->val); else if (sameWord(onePair->name,MDB_VAR_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 == cvSearchByDateRange || searchBy == cvSearchByIntegerRange) { // TO BE IMPLEMENTED } } // Be sure to include table or file in selections if (tables) dyStringPrintf(dyTerms,"%s=%s ",MDB_OBJ_TYPE,MDB_OBJ_TYPE_TABLE); if (files) dyStringPrintf(dyTerms,"%s=? ",MDB_VAR_FILENAME); // Build the mdbByVals struct and then select all mdbObjs in one query struct mdbObj *mdbObjs = mdbObjsQueryByVarVals(conn,dyStringContents(dyTerms));