287cb0c3c49f136e48a97b923ce48561f670bed9 tdreszer Mon Jan 31 10:36:08 2011 -0800 By Cricket's request, added -composite as an special case option for commonly queried var diff --git src/hg/lib/mdb.c src/hg/lib/mdb.c index cae4db3..0e3c418 100644 --- src/hg/lib/mdb.c +++ src/hg/lib/mdb.c @@ -726,30 +726,63 @@ mdbByVar->var = cloneString(var); mdbByVar->varType = (varType==NULL?vtUnknown:mdbVarTypeStringToEnum(varType)); if(val != NULL) { struct mdbLimbVal * limbVal; AllocVar(limbVal); limbVal->val = cloneString(val); mdbByVar->vals = limbVal; // Only one } return mdbByVar; } +boolean mdbByVarAppend(struct mdbByVar *mdbByVars,char *var, char *varType,char *val,boolean notEqual) +/* Adds a another var to a list of mdbByVar pairs to be used in metadata queries. */ +{ +// Does var already exist in mdbByVars? +enum mdbVarType newVarType = (varType==NULL?vtUnknown:mdbVarTypeStringToEnum(varType)); +struct mdbByVar *mdbByVar = mdbByVars; +for(;mdbByVar!=NULL;mdbByVar=mdbByVar->next) + { + if (sameString(mdbByVar->var,var) && mdbByVar->varType == newVarType && mdbByVar->notEqual == notEqual) + { + struct mdbLimbVal * limbVal = mdbByVar->vals; + for(;limbVal!=NULL;limbVal=limbVal->next) + { + if (sameString(limbVal->val,val)) + return FALSE; // Nothing to do as this var is already there. + } + struct mdbLimbVal * newLimbVal; + AllocVar(newLimbVal); + + newLimbVal->val = cloneString(val); + slAddTail(&(mdbByVar->vals),newLimbVal); + return TRUE; + } + } + +// Not found so add it +struct mdbByVar *newVar = mdbByVarCreate(var, varType,val); +newVar->notEqual = notEqual; +slAddTail(&mdbByVars,newVar); // Add to tail to avoid changing passed in pointer + +return TRUE; +} + struct mdbObj *mdbObjCreate(char *obj,char *var, char *varType,char *val) /* Creates a singular mdbObj query object based on obj and all other optional params. */ { struct mdbObj *mdbObj = NULL; if(obj == NULL) errAbort("Need obj to create mdbObj query object.\n"); AllocVar(mdbObj); mdbObj->obj = cloneString(obj); if(var != NULL) { struct mdbVar * mdbVar; AllocVar(mdbVar);