4f813a33f070da3ed7317861d6bae4d831af8fc0 tdreszer Tue Feb 22 13:27:13 2011 -0800 Added mdbObjsEncodeExperimentify() which will organize objects into experiments and allow the expId to be updated into the mdb diff --git src/hg/inc/mdb.h src/hg/inc/mdb.h index 20d90c9..9ffdc12 100644 --- src/hg/inc/mdb.h +++ src/hg/inc/mdb.h @@ -285,57 +285,83 @@ void mdbObjsSortOnVars(struct mdbObj **mdbObjs, char *vars); // Sorts on var,val pairs vars lists: fwd case-sensitive. Assumes all objs' vars are in identical order. // Optionally give list of vars "cell antibody treatment" to sort on (bringing to front of vars lists). void mdbObjsSortOnVarPairs(struct mdbObj **mdbObjs,struct slPair *varValPairs); // Sorts on var,val pairs vars lists: fwd case-sensitive. Assumes all objs' vars are in identical order. // This method will use mdbObjsSortOnVars() void mdbObjRemoveVars(struct mdbObj *mdbObjs, char *vars); // Prunes list of vars for an object, freeing the memory. Doesn't touch DB. char *mdbRemoveCommonVar(struct mdbObj *mdbList, char *var); // Removes var from set of mdbObjs but only if all that hav it have a commmon val // Returns the val if removed, else NULL +boolean mdbObjSetVar(struct mdbObj *mdbObj, char *var,char *val); +// Sets the string value to a single var in an obj, preparing for DB update. +// returns TRUE if updated, FALSE if added + +boolean mdbObjSetVarInt(struct mdbObj *mdbObj, char *var,int val); +// Sets an integer value to a single var in an obj, preparing for DB update. +// returns TRUE if updated, FALSE if added + void mdbObjSwapVars(struct mdbObj *mdbObjs, char *vars,boolean deleteThis); // Replaces objs' vars with var=vap pairs provided, preparing for DB update. -struct mdbObj *mdbObjsFilter(struct mdbObj **pMdbObjs, char *var, char *val,boolean exclude); -// Filters mdb objects to only those that include/exclude vars. Optionally checks val too. Frees removed objects +struct mdbObj *mdbObjsFilter(struct mdbObj **pMdbObjs, char *var, char *val,boolean returnMatches); +// Filters mdb objects to only those that include/exclude vars. Optionally checks val too. +// Returns matched or unmatched items objects as requested, maintaining sort order + +struct mdbObj *mdbObjsFilterByVars(struct mdbObj **pMdbObjs,char *vars,boolean noneEqualsNotFound,boolean returnMatches); +// Filters mdb objects to only those that include/exclude var=val pairs (e.g. "var1=val1 var2 var3!=val3 var4=None"). +// Supports != ("var!=" means var not found). Optionally supports var=None equal to var is not found +// Returns matched or unmatched items objects as requested. Multiple passes means sort order is destroyed. struct mdbObj *mdbObjsFilterTablesOrFiles(struct mdbObj **pMdbObjs,boolean table, boolean files); // Filters mdb objects to only those that have associated tables or files. Returns removed non-table/file objects // Note: Since table/file objects overlap, there are 3 possibilites: tables, files, table && files struct mdbObj *mdbObjIntersection(struct mdbObj **a, struct mdbObj *b); // return duplicate objs from an intersection of two mdbObj lists. // List b is untouched but pA will contain the resulting intersection void mdbObjTransformToUpdate(struct mdbObj *mdbObjs, char *var, char *varType,char *val,boolean deleteThis); // Turns one or more mdbObjs into the stucture needed to add/update or delete. struct mdbObj *mdbObjClone(const struct mdbObj *mdbObj); // Clones a single mdbObj, including hash and maintining order struct slName *mdbObjToSlName(struct mdbObj *mdbObjs); // Creates slNames list of mdbObjs->obj. mdbObjs remains untouched int mdbVarCmp(const void *va, const void *vb); /* Compare to sort on label. */ +// ----------------- Validateion and specialty APIs ----------------- +int mdbObjsValidate(struct mdbObj *mdbObjs, boolean full); +// Validates vars and vals against cv.ra. Returns count of errors found. +// Full considers vars not defined in cv as invalids + +struct mdbObj *mdbObjsEncodeExperimentify(struct sqlConnection *conn,char *db,char *tableName,struct mdbObj **pMdbObjs,int warn); +// Organizes objects into experiments and validates experiment IDs. Will add/update the ids in the structures. +// If warn=1, then prints to stdout all the experiments/obs with missing or wrong expIds; +// warn=2, then print line for each obj with expId or warning. +// Returns a new set of mdbObjs that is what can (and should) be used to update the mdb via mdbObjsSetToDb(). + + // --------------- Free at last ---------------- void mdbObjsFree(struct mdbObj **mdbObjsPtr); // Frees one or more metadata objects and any contained mdbVars. Will free any hashes as well. void mdbByVarsFree(struct mdbByVar **mdbByVarsPtr); // Frees one or more metadata vars and any contained vals and objs. Will free any hashes as well. // ----------------- CGI specific routines for use with tdb ----------------- const struct mdbObj *metadataForTable(char *db,struct trackDb *tdb,char *table); // Returns the metadata for a table. NEVER FREE THIS STRUCT! // This is the main routine for CGIs to access metadata const char *metadataFindValue(struct trackDb *tdb, char *var); // Finds the val associated with the var or retruns NULL @@ -377,22 +403,17 @@ // metadata Variavble are only certain declared types { cvsNotSearchable =0, // Txt is default cvsSearchByMultiSelect =1, // Search by drop down multi-select of supplied list (NOT YET IMPLEMENTED) cvsSearchBySingleSelect =2, // Search by drop down single-select of supplied list cvsSearchByFreeText =3, // Search by free text field (NOT YET IMPLEMENTED) cvsSearchByDateRange =4, // Search by discovered date range (NOT YET IMPLEMENTED) cvsSearchByIntegerRange =5 // Search by discovered integer range (NOT YET IMPLEMENTED) }; enum mdbCvSearchable mdbCvSearchMethod(char *term); // returns whether the term is searchable // TODO: replace with mdbCvWhiteList() returning struct const char *cvLabel(char *term); // returns cv label if term found or else just term - -int mdbObjsValidate(struct mdbObj *mdbObjs, boolean full); -// Validates vars and vals against cv.ra. Returns count of errors found. -// Full considers vars not defined in cv as invalids - #endif /* MDB_H */