d9e80e08eb790f54309b4818a8117ecdb1ca6329 tdreszer Thu Sep 29 13:38:05 2011 -0700 Added in '-or' and ' || ' support to mdbPrint/mdbUpdate selections diff --git src/hg/inc/mdb.h src/hg/inc/mdb.h index 2651959..4d66fa4 100644 --- src/hg/inc/mdb.h +++ src/hg/inc/mdb.h @@ -177,30 +177,37 @@ char *val; // Metadata value. struct mdbLeafObj* objs; // if NOT NULL: list of Objects which have this variable struct hash* objHash; // if NOT NULL: hash of objects (val str to leafObj struct) }; struct mdbByVar // When searching metadata var->val->object this is the top struct { struct mdbByVar* next; // Next in singly linked list of variables char *var; // Metadata variable name. boolean notEqual; // For querying only struct mdbLimbVal* vals; // list of values associated with this var struct hash* valHash; // if NOT NULL: hash of vals (val str to limbVal struct) }; +// -------------- Sort primitives -------------- +int mdbObjCmp(const void *va, const void *vb); +// Compare mdbObj to sort on obj name, case-insensitive. + +int mdbVarCmp(const void *va, const void *vb); +// Compare mdbVar to sort on var name, case-insensitive. + // ------ Parsing lines ------ struct mdbObj *metadataLineParse(char *line); /* Parses a single formatted metadata line into mdbObj for updates or queries. */ struct mdbByVar *mdbByVarsLineParse(char *line); /* Parses a line of "var1=val1 var2=val2 into a mdbByVar object for queries. */ // ------ Loading from args, hashes ------ struct mdbObj *mdbObjCreate(char *obj,char *var, char *val); /* Creates a singular mdbObj query object based on obj and all other optional params. */ struct mdbObj *mdbObjNew(char *obj,struct mdbVar *mdbVars); // Returns a new mdbObj with whatever was passed in. // An mdbObj requires and obj, so if one is not supplied it will be "[unknown]" @@ -380,31 +387,31 @@ 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. +// return objs removed from pA while making 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 *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. */