123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /* SQL Parser */
- /* KEYWORD OPS */
- /* SQL COMMANDS */
- #define SQLP_CREATE 1
- #define SQLP_DROP 2
- #define SQLP_INSERT 3
- #define SQLP_SELECT 4
- #define SQLP_UPDATE 5
- #define SQLP_DELETE 6
- #define SQLP_ADD_COLUMN 7
- #define SQLP_DROP_COLUMN 8
- /* SQL OPERATORS */
- /* Arithmetical */
- #define SQLP_ADD 1 /* + */
- #define SQLP_SUBTR 2 /* - */
- #define SQLP_MLTP 3 /* * */
- #define SQLP_DIV 4 /* / */
- /* Comparison */
- #define SQLP_EQ 11 /* = */
- #define SQLP_LT 12 /* < */
- #define SQLP_LE 13 /* <= */
- #define SQLP_GT 14 /* > */
- #define SQLP_GE 15 /* >= */
- #define SQLP_NE 16 /* <> */
- #define SQLP_MTCH 17 /* ~ */
- #define SQLP_ISNULL 18 /* IS NULL */
- #define SQLP_NOTNULL 19 /* IS NULL */
- /* Logical */
- #define SQLP_AND 21
- #define SQLP_OR 22
- #define SQLP_NOT 23
- /* SQL VALUE TYPES, NOT COLUMN TYPES */
- #define SQLP_NULL 1 /* value NULL -> unknown type */
- #define SQLP_S 2 /* string */
- #define SQLP_I 3 /* integer */
- #define SQLP_D 4 /* float */
- #define SQLP_BOOL 5 /* used only for type of expression */
- #define SQLP_EXPR 6 /* expression XXX */
- /* SQL COLUMN TYPES */
- #define SQLP_VARCHAR 1
- #define SQLP_INTEGER 2
- #define SQLP_DOUBLE 3
- #define SQLP_DATE 4
- #define SQLP_TIME 5
- #define SQLP_MAX_TABLE 200
- #define SQLP_MAX_ERR 500
- /* Condition node */
- #define SQLP_NODE_COLUMN 1
- #define SQLP_NODE_VALUE 2
- #define SQLP_NODE_EXPRESSION 3
- /* Order direction */
- #define SORT_ASC 1
- #define SORT_DESC 2
- typedef struct
- {
- int type; /* SQLP_S, SQLP_I, SQLP_D, SQLP_NULL, SQL_EXPR */
- char *s; /* pointer to string or NULL */
- int i;
- double d;
- struct sqlpnode *expr;
- } SQLPVALUE;
- typedef struct sqlpnode
- {
- int node_type; /* Node type: SQLP_NODE_COLUMN, SQLP_NODE_VALUE, SQLP_NODE_EXPRESSION */
- int oper; /* Operator code */
- struct sqlpnode *left; /* left argument, sometimes NULL */
- struct sqlpnode *right; /* right argument, sometimes NULL */
- char *column_name;
- SQLPVALUE value;
- } SQLPNODE;
- typedef struct
- {
- char *stmt; /* input statement string */
- char *cur; /* cursor for parser */
- char errmsg[SQLP_MAX_ERR + 1];
- int command;
- char table[SQLP_MAX_TABLE + 1];
- SQLPVALUE *Col; /* column names */
- int *ColType;
- int *ColWidth; /* length */
- int *ColDecim; /* decimals */
- int aCol; /* allocated */
- int nCol; /* number of columns */
- SQLPVALUE *Val; /* values */
- int aVal;
- int nVal;
- SQLPNODE *upperNodeptr;
- char *orderCol; /* column name which should be used for sorting (ORDER BY) or NULL (no sorting) */
- int orderDir; /* direction of ordering (ASC or DESC) */
- } SQLPSTMT;
- int my_yyinput(char *buf, int max_size);
- void yyerror(char *s);
- int yyparse();
- int yywrap();
- int sqpSaveStr(SQLPVALUE * st, char *c);
- void sqpInitValue(SQLPVALUE * val);
- void sqpCopyValue(SQLPVALUE * from, SQLPVALUE * to);
- SQLPSTMT *sqpInitStmt(void);
- int sqpFreeStmt(SQLPSTMT * st);
- int sqpPrintStmt(SQLPSTMT * st);
- int sqpAllocCol(SQLPSTMT * st, int n);
- int sqpAllocVal(SQLPSTMT * st, int n);
- int sqpAllocCom(SQLPSTMT * st, int n);
- int sqpInitParser(SQLPSTMT * st);
- void sqpCommand(int command);
- void sqpTable(char *table);
- void sqpColumn(char *column);
- void sqpColumnDef(char *column, int type, int width, int decimals);
- void sqpValue(char *strval, int intval, double dblval, int type);
- void sqpAssignment(char *column, char *strval, int intval, double dblval,
- SQLPNODE * expr, int type);
- void sqpOrderColumn(char *col, int dir);
- int sqpOperatorCode(char *);
- char *sqpOperatorName(int);
- SQLPNODE *sqpNewNode(void);
- SQLPNODE *sqpNewExpressionNode(int oper, SQLPNODE * left, SQLPNODE * right);
- SQLPNODE *sqpNewColumnNode(char *name);
- SQLPNODE *sqpNewValueNode(char *strval, int intval, double dblval, int type);
- void sqpFreeNode(SQLPNODE *);
- extern SQLPSTMT *sqlpStmt;
|