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. */