src/hg/lib/mdb.c 1.4
1.4 2010/04/23 02:38:36 tdreszer
Handle '#' comments more gracefully and include quotes in non-RA style printing
Index: src/hg/lib/mdb.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/mdb.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -b -B -U 4 -r1.3 -r1.4
--- src/hg/lib/mdb.c 19 Apr 2010 18:57:45 -0000 1.3
+++ src/hg/lib/mdb.c 23 Apr 2010 02:38:36 -0000 1.4
@@ -244,9 +244,11 @@
#include "ra.h"
#include "hgConfig.h"
#include "obscure.h"
+#define MDB_METADATA_KEY "metadata"
#define MDB_METAOBJ_RAKEY "metaObject"
+#define MDB_METAVAR_RAKEY "metaVariable"
#define MDB_OBJ_TYPE "objType"
// ------- (static) convert from autoSql -------
static void mdbVarFree(struct mdbVar **mdbVarPtr)
@@ -491,8 +493,10 @@
int ix;
for(ix = 0;ix<count;ix++)
{
+ if(*words[ix] == '#')
+ break;
if(strchr(words[ix], '=') == NULL)
errAbort("This is not formatted var=val pairs: '%s'\n\t%s\n",words[ix],varPairs);
AllocVar(mdbVar);
@@ -599,9 +603,9 @@
/* Parses a single formatted metadata line into mdbObj for updates or queries. */
{
char *fromTheTop = line;
char*nibbledWord = cloneNextWordByDelimiter(&line,' ');
-if(nibbledWord == NULL || differentWord(nibbledWord,"metadata"))
+if(nibbledWord == NULL || differentWord(nibbledWord,MDB_METADATA_KEY))
errAbort("This is not a formatted metadata line:\n\t%s\n",fromTheTop);
freeMem(nibbledWord);
struct mdbObj *mdbObj = NULL;
@@ -619,9 +623,9 @@
{
nibbledWord = cloneNextWordByDelimiter(&line,' ');;
if(nibbledWord == NULL)
errAbort("This is not a formatted metadata line:\n\t%s\n",fromTheTop);
- if(strchr(nibbledWord, '=') != NULL) // If this is start of var=val pairs
+ if(*nibbledWord == '#' || strchr(nibbledWord, '=') != NULL) // IS commnet OR start of var=val pairs
break;
if(sameWord(nibbledWord,"delete"))
mdbObj->deleteThis = TRUE;
@@ -630,9 +634,9 @@
varPairs = line;
freeMem(nibbledWord);
}
}
-if(strlen(varPairs) > 0)
+if(varPairs != NULL && strlen(varPairs) > 0 && *varPairs != '#')
mdbObj = mdbObjAddVarPairs(mdbObj,varPairs);
else if(mdbObj->deleteThis == FALSE)
errAbort("This is not a formatted metadata line:\n\t%s\n",fromTheTop);
return mdbObj;
@@ -795,8 +799,11 @@
char *line;
while (lineFileNext(lf, &line,NULL))
{
+ char *start = skipLeadingSpaces(line);
+ if(start == NULL || *start == '#')
+ continue;
if(startsWithWord(MDB_METAOBJ_RAKEY,line))
{
// This is the RA style file!!
lineFileClose(&lf);
@@ -1155,9 +1162,9 @@
dyStringPrintf(dy, " where (var ");
else
dyStringPrintf(dy, " OR (var ");
if(rootVar->notEqual && rootVar->vals == NULL)
- dyStringPrintf(dy, "NOT ");
+ dyStringPrintf(dy, "%s",strchr(rootVar->var,'%')?"NOT ":"!");
dyStringPrintf(dy, "%s '%s'",
(strchr(rootVar->var,'%')?"like":"="), rootVar->var);
@@ -1171,9 +1178,9 @@
if(!multiVals)
{
dyStringPrintf(dy, " and val ");
if(rootVar->notEqual)
- dyStringPrintf(dy, "NOT ");
+ dyStringPrintf(dy, "%s",strchr(limbVal->val,'%')?"NOT ":"!");
if(limbVal->next == NULL) // only one val
{
dyStringPrintf(dy, "%s '%s'",
(strchr(limbVal->val,'%')?"like":"="), sqlEscapeString(limbVal->val));
@@ -1243,9 +1250,9 @@
dyStringPrintf(dy, " AND obj in ");
dyStringPrintf(dy, "(select obj from %s where var ",table);
if(rootVar->notEqual && rootVar->vals == NULL)
- dyStringPrintf(dy, "NOT ");
+ dyStringPrintf(dy, "%s",strchr(rootVar->var,'%')?"NOT ":"!");
dyStringPrintf(dy, "%s '%s'",
(strchr(rootVar->var,'%')?"like":"="), rootVar->var);
@@ -1259,9 +1266,9 @@
if(!multiVals)
{
dyStringPrintf(dy, " and val ");
if(rootVar->notEqual)
- dyStringPrintf(dy, "NOT ");
+ dyStringPrintf(dy, "%s",strchr(limbVal->val,'%')?"NOT ":"!");
if(limbVal->next == NULL) // only one val
{
dyStringPrintf(dy, "%s '%s'",
(strchr(limbVal->val,'%')?"like":"="), sqlEscapeString(limbVal->val));
@@ -1303,8 +1310,10 @@
if(mdbVar->val != NULL)
{
if(mdbVar->varType == vtBinary)
printf("binary");
+ else if(!raStyle && strchr(mdbVar->val, ' ') != NULL) // Has blanks
+ printf("\"%s\"",mdbVar->val);
else
printf("%s",mdbVar->val);
}
}
@@ -1326,9 +1335,9 @@
{
if(mdbObj->obj == NULL)
continue;
- printf("%s %s",(raStyle?MDB_METAOBJ_RAKEY:"metadata"),mdbObj->obj);
+ printf("%s %s",(raStyle?MDB_METAOBJ_RAKEY:MDB_METADATA_KEY),mdbObj->obj);
if(mdbObj->deleteThis)
printf(" delete");
struct mdbVar *mdbVar = NULL;
@@ -1356,49 +1365,52 @@
// Single line:
// mdbVariable lucy=ethyl bestFriends lifePartners
// mdbVariable lucy=ricky iLoveLucy divorces
// NOT QUITE ra style
-// mdbVariable lucy
-// ethyl
-// bestFriends
-// lifePartners
-// ricky
-// iLoveLucy
-// divorces
-// TODO: Expand for mutilple var types; strip quotes from vals on ra style
+// metadata Fred wife=Ethyl
+// metadata Lucy wife=Ethyl
+// Results in:
+// mdbVariable wife Ethyl
+// metaObject Fred
+// metaObject Lucy
struct mdbByVar *rootVar = NULL;
for(rootVar=mdbByVars;rootVar!=NULL;rootVar=rootVar->next)
{
if(rootVar->var == NULL)
continue;
- boolean first = TRUE;
struct mdbLimbVal *limbVal = NULL;
for(limbVal=rootVar->vals;limbVal!=NULL;limbVal=limbVal->next)
{
if(limbVal->val == NULL)
continue;
- if(first) // first val for this var
- {
- printf("mdbVariable %s",rootVar->var);
- first = FALSE;
- }
+ if(raStyle)
+ printf("%s %s ",MDB_METAVAR_RAKEY,rootVar->var);
+ else
+ printf("%s %s=",MDB_METAVAR_RAKEY,rootVar->var);
if(rootVar->varType == vtBinary)
- printf("%sbinary",(raStyle ? "\n ":"="));
+ printf("binary");
+ else if(!raStyle && strchr(limbVal->val, ' ') != NULL) // Has blanks
+ printf("\"%s\"",limbVal->val);
else
- printf("%s%s",(raStyle ? "\n ":"="),limbVal->val);
+ printf("%s",limbVal->val);
struct mdbLeafObj *leafObj = NULL;
for(leafObj=limbVal->objs;leafObj!=NULL;leafObj=leafObj->next)
{
if(leafObj->obj == NULL)
continue;
- printf("%s%s",(raStyle?"\n ":" "),leafObj->obj);
+ if(raStyle)
+ printf("\n%s %s",MDB_METAOBJ_RAKEY,leafObj->obj);
+ else
+ printf(" %s",leafObj->obj);
}
printf("\n");
+ if(raStyle)
+ printf("\n");
}
}
}
@@ -1794,9 +1806,9 @@
#define MDB_OBJ_KEY "mdbObj"
static struct mdbObj *metadataForTableFromTdb(struct trackDb *tdb)
// Returns the metadata for a table from a tdb setting.
{
-char *setting = trackDbSetting(tdb, "metadata");
+char *setting = trackDbSetting(tdb, MDB_METADATA_KEY);
if(setting == NULL)
return NULL;
struct mdbObj *mdbObj;
AllocVar(mdbObj);