src/utils/raSqlQuery/rql.h 1.2
1.2 2009/11/22 02:54:37 kent
Parsing out (and ignoring) optional from clause.
Index: src/utils/raSqlQuery/rql.h
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/utils/raSqlQuery/rql.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -b -B -U 1000000 -r1.1 -r1.2
--- src/utils/raSqlQuery/rql.h 20 Nov 2009 07:41:56 -0000 1.1
+++ src/utils/raSqlQuery/rql.h 22 Nov 2009 02:54:37 -0000 1.2
@@ -1,98 +1,99 @@
enum rqlOp
{
rqlOpUnknown, /* Should not occur */
rqlOpLiteral, /* Literal string or number. */
rqlOpSymbol, /* A symbol name. */
rqlOpEq, /* An equals comparison */
rqlOpNe, /* A not equals comparison */
rqlOpStringToBoolean,
rqlOpIntToBoolean,
rqlOpDoubleToBoolean,
rqlOpStringToInt,
rqlOpStringToDouble,
rqlOpBooleanToInt,
rqlOpBooleanToDouble,
rqlOpIntToDouble,
rqlOpUnaryMinusDouble,
rqlOpGt, /* Greater than comparison. */
rqlOpLt, /* Less than comparison. */
rqlOpGe, /* Greater than or equals comparison. */
rqlOpLe, /* Less than or equals comparison. */
rqlOpLike, /* SQL wildcard compare. */
rqlOpAnd, /* An and */
rqlOpOr, /* An or */
rqlOpNot, /* A unary not. */
};
char *rqlOpToString(enum rqlOp op);
/* Return string representation of parse op. */
enum rqlType
/* A type */
{
rqlTypeBoolean = 1,
rqlTypeString = 2,
rqlTypeInt = 3,
rqlTypeDouble = 4,
};
union rqlVal
/* Some value of arbirary type that can be of any type corresponding to rqlType */
{
boolean b;
char *s;
int i;
double x;
};
struct rqlEval
/* Result of evaluation of parse tree. */
{
enum rqlType type;
union rqlVal val;
};
struct rqlParse
/* A rql parse-tree. */
{
struct rqlParse *next; /* Points to younger sibling if any. */
struct rqlParse *children; /* Points to oldest child if any. */
enum rqlOp op; /* Operation at this node. */
enum rqlType type; /* Return type of this operation. */
union rqlVal val; /* Return value of this operation. */
};
struct rqlStatement
/* A parsed out RQL statement */
{
char *next; /* Next in list */
char *command; /* Generally the first word in the statement. */
struct slName *fieldList; /* List of fields if any. */
+ struct slName *tableList; /* List of tables if any. */
struct rqlParse *whereClause; /* Where clause if any - tokenized. */
};
void rqlValDump(union rqlVal val, enum rqlType type, FILE *f);
/* Dump out value to file. */
void rqlParseDump(struct rqlParse *p, int depth, FILE *f);
/* Dump out rqlParse tree and children. */
struct rqlParse *rqlParseExpression(struct tokenizer *tkz);
/* Parse out a clause, usually a where clause. */
struct rqlStatement *rqlStatementParse(struct lineFile *lf);
/* Parse an RQL statement out of text */
void rqlStatementDump(struct rqlStatement *rql, FILE *f);
/* Print out statement to file. */
struct rqlEval rqlEvalOnRecord(struct rqlParse *p, struct raRecord *ra);
/* Evaluate self on ra. */
struct rqlEval rqlEvalCoerceToBoolean(struct rqlEval r);
/* Return TRUE if it's a nonempty string or a non-zero number. */