1 #ifndef GRASS_SQLP_H 2 #define GRASS_SQLP_H 3 4 /* SQL Parser */ 5 6 /* KEYWORD OPS */ 7 8 /* SQL COMMANDS */ 9 #define SQLP_CREATE 1 10 #define SQLP_DROP 2 11 #define SQLP_INSERT 3 12 #define SQLP_SELECT 4 13 #define SQLP_UPDATE 5 14 #define SQLP_DELETE 6 15 #define SQLP_ADD_COLUMN 7 16 #define SQLP_DROP_COLUMN 8 17 18 /* SQL OPERATORS */ 19 /* Arithmetical */ 20 #define SQLP_ADD 1 /* + */ 21 #define SQLP_SUBTR 2 /* - */ 22 #define SQLP_MLTP 3 /* * */ 23 #define SQLP_DIV 4 /* / */ 24 25 /* Comparison */ 26 #define SQLP_EQ 11 /* = */ 27 #define SQLP_LT 12 /* < */ 28 #define SQLP_LE 13 /* <= */ 29 #define SQLP_GT 14 /* > */ 30 #define SQLP_GE 15 /* >= */ 31 #define SQLP_NE 16 /* <> */ 32 #define SQLP_MTCH 17 /* ~ */ 33 34 #define SQLP_ISNULL 18 /* IS NULL */ 35 #define SQLP_NOTNULL 19 /* IS NULL */ 36 37 /* Logical */ 38 #define SQLP_AND 21 39 #define SQLP_OR 22 40 #define SQLP_NOT 23 41 42 /* SQL VALUE TYPES, NOT COLUMN TYPES */ 43 #define SQLP_NULL 1 /* value NULL -> unknown type */ 44 #define SQLP_S 2 /* string */ 45 #define SQLP_I 3 /* integer */ 46 #define SQLP_D 4 /* float */ 47 #define SQLP_BOOL 5 /* used only for type of expression */ 48 #define SQLP_EXPR 6 /* expression XXX */ 49 50 /* SQL COLUMN TYPES */ 51 #define SQLP_VARCHAR 1 52 #define SQLP_INTEGER 2 53 #define SQLP_DOUBLE 3 54 #define SQLP_DATE 4 55 #define SQLP_TIME 5 56 57 #define SQLP_MAX_TABLE 200 58 #define SQLP_MAX_ERR 500 59 60 /* Condition node */ 61 #define SQLP_NODE_COLUMN 1 62 #define SQLP_NODE_VALUE 2 63 #define SQLP_NODE_EXPRESSION 3 64 65 /* Order direction */ 66 #define SORT_ASC 1 67 #define SORT_DESC 2 68 69 70 typedef struct 71 { 72 int type; /* SQLP_S, SQLP_I, SQLP_D, SQLP_NULL, SQL_EXPR */ 73 char *s; /* pointer to string or NULL */ 74 int i; 75 double d; 76 struct sqlpnode *expr; 77 } SQLPVALUE; 78 79 typedef struct sqlpnode 80 { 81 int node_type; /* Node type: SQLP_NODE_COLUMN, SQLP_NODE_VALUE, SQLP_NODE_EXPRESSION */ 82 int oper; /* Operator code */ 83 struct sqlpnode *left; /* left argument, sometimes NULL */ 84 struct sqlpnode *right; /* right argument, sometimes NULL */ 85 char *column_name; 86 SQLPVALUE value; 87 } SQLPNODE; 88 89 typedef struct 90 { 91 char *stmt; /* input statement string */ 92 char *cur; /* cursor for parser */ 93 char errmsg[SQLP_MAX_ERR + 1]; 94 int command; 95 char table[SQLP_MAX_TABLE + 1]; 96 SQLPVALUE *Col; /* column names */ 97 int *ColType; 98 int *ColWidth; /* length */ 99 int *ColDecim; /* decimals */ 100 int aCol; /* allocated */ 101 int nCol; /* number of columns */ 102 SQLPVALUE *Val; /* values */ 103 int aVal; 104 int nVal; 105 SQLPNODE *upperNodeptr; 106 char *orderCol; /* column name which should be used for sorting (ORDER BY) or NULL (no sorting) */ 107 int orderDir; /* direction of ordering (ASC or DESC) */ 108 } SQLPSTMT; 109 110 #include <grass/defs/sqlp.h> 111 112 extern SQLPSTMT *sqlpStmt; 113 114 #endif 115