File: sqlp.h

package info (click to toggle)
grass 6.0.2-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 40,044 kB
  • ctags: 31,303
  • sloc: ansic: 321,125; tcl: 25,676; sh: 11,176; cpp: 10,098; makefile: 5,025; fortran: 1,846; yacc: 493; lex: 462; perl: 133; sed: 1
file content (139 lines) | stat: -rw-r--r-- 3,795 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* 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

/* 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 */

/* SQL COLUMN TYPES */
#define SQLP_VARCHAR 1 
#define SQLP_INTEGER 2 
#define SQLP_DOUBLE  3 
#define SQLP_DATE    4

#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

typedef struct
{
    int    type; /* SQLP_S, SQLP_I, SQLP_D, SQLP_NULL */
    char   *s; /* pointer to string or NULL */
    int    i;
    double d;
} 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) */
} 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, int type );
void sqpOrderColumn( char *col );
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 * );

#ifdef SQLP_MAIN
SQLPSTMT *sqlpStmt;
#else
extern SQLPSTMT *sqlpStmt;
#endif