71fdb3f32d8966783bcd7a070c65c1b88200956a
kent
  Sun Feb 15 12:19:35 2015 -0800
Adding a helper function to parse from a string as opposed to a file.

diff --git src/lib/rqlParse.c src/lib/rqlParse.c
index 93a5678..55581af 100644
--- src/lib/rqlParse.c
+++ src/lib/rqlParse.c
@@ -694,30 +694,39 @@
     char *count = tokenizerMustHaveNext(tkz);
     if (!isdigit(count[0]))
        errAbort("Expecting number after limit, got %s line %d of %s", 
        	count, lf->lineIx, lf->fileName);
     rql->limit = atoi(count);
     }
 
 /* Check that are at end of statement. */
 char *extra = tokenizerNext(tkz);
 if (extra != NULL)
     errAbort("Extra stuff starting with '%s' past end of statement line %d of %s", 
     	extra, lf->lineIx, lf->fileName);
 return rql;
 }
 
+struct rqlStatement *rqlStatementParseString(char *string)
+/* Return a parsed-out RQL statement based on string */
+{
+struct lineFile *lf = lineFileOnString("query", TRUE, cloneString(string));
+struct rqlStatement *rql = rqlStatementParse(lf);
+lineFileClose(&lf);
+return rql;
+}
+
 void rqlStatementDump(struct rqlStatement *rql, FILE *f)
 /* Print out statement to file. */
 {
 fprintf(f, "%s:", rql->command);
 if (rql->fieldList)
     {
     fprintf(f, " ");
     struct slName *field = rql->fieldList;
     fprintf(f, "%s", field->name);
     for (field = field->next; field != NULL; field = field->next)
         fprintf(f, ",%s", field->name);
     }
 fprintf(f, "\n");
 if (rql->tableList)
     {