GRASS 8 Programmer's Manual
8.6.0dev(2026)-8843f13794
Loading...
Searching...
No Matches
print.c
Go to the documentation of this file.
1
/*****************************************************************************
2
*
3
* MODULE: SQL statement parser library
4
*
5
* AUTHOR(S): lex.l and yac.y were originally taken from unixODBC and
6
* probably written by Peter Harvey <pharvey@codebydesigns.com>,
7
* modifications and other code by Radim Blazek
8
*
9
* PURPOSE: Parse input string containing SQL statement to
10
* SQLPSTMT structure.
11
* SQL parser may be used by simple database drivers.
12
*
13
* SPDX-FileCopyrightText: 2000 GRASS Development Team
14
* SPDX-License-Identifier: GPL-2.0-or-later
15
*
16
*****************************************************************************/
17
18
#include <
grass/sqlp.h
>
19
#include <
stdio.h
>
20
21
static
void
print_node(
SQLPNODE
*
nptr
,
int
level)
22
{
23
int
i;
24
25
for
(i = 0; i < level; i++) {
26
fprintf
(
stderr
,
" "
);
27
}
28
29
if
(
nptr
->node_type ==
SQLP_NODE_EXPRESSION
) {
30
fprintf
(
stderr
,
"op: %s\n"
,
sqpOperatorName
(
nptr
->oper));
31
if
(
nptr
->left) {
32
print_node(
nptr
->left, level + 1);
33
}
34
if
(
nptr
->right) {
35
print_node(
nptr
->right, level + 1);
36
}
37
}
38
else
if
(
nptr
->node_type ==
SQLP_NODE_VALUE
) {
39
switch
(
nptr
->value.type) {
40
case
SQLP_NULL
:
41
fprintf
(
stderr
,
"val: NULL\n"
);
42
break
;
43
case
SQLP_D
:
44
fprintf
(
stderr
,
"val: %e\n"
,
nptr
->value.d);
45
break
;
46
case
SQLP_I
:
47
fprintf
(
stderr
,
"val: %d\n"
,
nptr
->value.i);
48
break
;
49
case
SQLP_S
:
50
fprintf
(
stderr
,
"val: '%s'\n"
,
nptr
->value.s);
51
break
;
52
}
53
}
54
else
{
/* SQLP_NODE_COLUMN */
55
fprintf
(
stderr
,
"col: %s\n"
,
nptr
->column_name);
56
}
57
}
58
59
int
sqpPrintStmt
(
SQLPSTMT
*st)
60
{
61
int
i;
62
63
fprintf
(
stderr
,
"********** SQL PARSER RESULT **********\n"
);
64
fprintf
(
stderr
,
"INPUT: %s\n"
,
sqlpStmt
->
stmt
);
65
fprintf
(
stderr
,
"COMMAND: "
);
66
switch
(
sqlpStmt
->
command
) {
67
case
(
SQLP_ADD_COLUMN
):
68
fprintf
(
stderr
,
"ADD COLUMN\n"
);
69
break
;
70
case
(
SQLP_CREATE
):
71
fprintf
(
stderr
,
"CREATE\n"
);
72
break
;
73
case
(
SQLP_DROP
):
74
fprintf
(
stderr
,
"DROP\n"
);
75
break
;
76
case
(
SQLP_DROP_COLUMN
):
77
fprintf
(
stderr
,
"DROP COLUMN\n"
);
78
break
;
79
case
(
SQLP_INSERT
):
80
fprintf
(
stderr
,
"INSERT\n"
);
81
break
;
82
case
(
SQLP_UPDATE
):
83
fprintf
(
stderr
,
"UPDATE\n"
);
84
break
;
85
case
(
SQLP_SELECT
):
86
fprintf
(
stderr
,
"SELECT\n"
);
87
break
;
88
case
(
SQLP_DELETE
):
89
fprintf
(
stderr
,
"DELETE\n"
);
90
break
;
91
default
:
92
fprintf
(
stderr
,
"UNKNOWN\n"
);
93
}
94
95
fprintf
(
stderr
,
"TABLE: %s\n"
,
sqlpStmt
->
table
);
96
97
/* columns */
98
for
(i = 0; i <
st
->nCol; i++) {
99
if
(
sqlpStmt
->
command
==
SQLP_CREATE
) {
100
fprintf
(
stderr
,
"COLUMN %2d: "
, i + 1);
101
switch
(
sqlpStmt
->
ColType
[i]) {
102
case
(
SQLP_VARCHAR
):
103
fprintf
(
stderr
,
"type:varchar width:%d"
,
sqlpStmt
->
ColWidth
[i]);
104
break
;
105
case
(
SQLP_INTEGER
):
106
fprintf
(
stderr
,
"type:integer"
);
107
break
;
108
case
(
SQLP_DOUBLE
):
109
fprintf
(
stderr
,
"type:double"
);
110
break
;
111
case
(
SQLP_DATE
):
112
fprintf
(
stderr
,
"type:date"
);
113
break
;
114
case
(
SQLP_TIME
):
115
fprintf
(
stderr
,
"type:time"
);
116
break
;
117
default
:
118
fprintf
(
stderr
,
"type:unknown"
);
119
break
;
120
}
121
fprintf
(
stderr
,
" name:%s\n"
,
sqlpStmt
->
Col
[i].
s
);
122
}
123
else
{
124
fprintf
(
stderr
,
"COLUMN %2d: %s\n"
, i + 1,
sqlpStmt
->
Col
[i].
s
);
125
}
126
}
127
128
/* values */
129
for
(i = 0; i <
st
->nVal; i++) {
130
fprintf
(
stderr
,
"VALUE %2d "
, i + 1);
131
switch
(
sqlpStmt
->
Val
[i].
type
) {
132
case
(
SQLP_S
):
133
fprintf
(
stderr
,
"(string) : %s\n"
,
sqlpStmt
->
Val
[i].
s
);
134
break
;
135
case
(
SQLP_I
):
136
fprintf
(
stderr
,
"(integer): %d\n"
,
sqlpStmt
->
Val
[i].
i
);
137
break
;
138
case
(
SQLP_D
):
139
fprintf
(
stderr
,
"(float) : %f\n"
,
sqlpStmt
->
Val
[i].
d
);
140
break
;
141
case
(
SQLP_NULL
):
142
fprintf
(
stderr
,
"(unknown) : null\n"
);
143
break
;
144
case
(
SQLP_EXPR
):
145
fprintf
(
stderr
,
"(expression) :\n"
);
146
print_node(
sqlpStmt
->
Val
[i].
expr
, 0);
147
break
;
148
default
:
149
fprintf
(
stderr
,
"unknown\n"
);
150
break
;
151
}
152
}
153
154
if
(
sqlpStmt
->
upperNodeptr
) {
155
fprintf
(
stderr
,
"WHERE:\n"
);
156
print_node(
sqlpStmt
->
upperNodeptr
, 0);
157
}
158
159
if
(
sqlpStmt
->
command
==
SQLP_SELECT
) {
160
if
(
sqlpStmt
->
orderDir
) {
161
fprintf
(
stderr
,
"ORDER BY: %s %s\n"
,
sqlpStmt
->
orderCol
,
162
sqlpStmt
->
orderDir
== 1 ?
"ASC"
:
"DESC"
);
163
}
164
else
{
165
fprintf
(
stderr
,
"ORDER BY: %s\n"
,
sqlpStmt
->
orderCol
);
166
}
167
}
168
169
fprintf
(
stderr
,
"***************************************\n"
);
170
171
return
(1);
172
}
AMI_STREAM
Definition
ami_stream.h:153
sqpOperatorName
char * sqpOperatorName(int)
Definition
sql.c:322
st
struct state * st
Definition
parser.c:102
sqpPrintStmt
int sqpPrintStmt(SQLPSTMT *st)
Definition
print.c:59
sqlp.h
SQLP_VARCHAR
#define SQLP_VARCHAR
Definition
sqlp.h:51
SQLP_DOUBLE
#define SQLP_DOUBLE
Definition
sqlp.h:53
SQLP_S
#define SQLP_S
Definition
sqlp.h:44
SQLP_INSERT
#define SQLP_INSERT
Definition
sqlp.h:11
SQLP_D
#define SQLP_D
Definition
sqlp.h:46
SQLP_TIME
#define SQLP_TIME
Definition
sqlp.h:55
SQLP_NODE_VALUE
#define SQLP_NODE_VALUE
Definition
sqlp.h:62
SQLP_ADD_COLUMN
#define SQLP_ADD_COLUMN
Definition
sqlp.h:15
SQLP_DROP
#define SQLP_DROP
Definition
sqlp.h:10
SQLP_NODE_EXPRESSION
#define SQLP_NODE_EXPRESSION
Definition
sqlp.h:63
SQLP_SELECT
#define SQLP_SELECT
Definition
sqlp.h:12
SQLP_CREATE
#define SQLP_CREATE
Definition
sqlp.h:9
SQLP_EXPR
#define SQLP_EXPR
Definition
sqlp.h:48
SQLP_DATE
#define SQLP_DATE
Definition
sqlp.h:54
SQLP_DELETE
#define SQLP_DELETE
Definition
sqlp.h:14
SQLP_UPDATE
#define SQLP_UPDATE
Definition
sqlp.h:13
SQLP_I
#define SQLP_I
Definition
sqlp.h:45
SQLP_NULL
#define SQLP_NULL
Definition
sqlp.h:43
SQLP_INTEGER
#define SQLP_INTEGER
Definition
sqlp.h:52
SQLP_DROP_COLUMN
#define SQLP_DROP_COLUMN
Definition
sqlp.h:16
sqlpStmt
SQLPSTMT * sqlpStmt
Definition
sql.c:34
stdio.h
SQLPSTMT
Definition
sqlp.h:87
SQLPSTMT::stmt
char * stmt
Definition
sqlp.h:88
SQLPSTMT::Col
SQLPVALUE * Col
Definition
sqlp.h:93
SQLPSTMT::upperNodeptr
SQLPNODE * upperNodeptr
Definition
sqlp.h:102
SQLPSTMT::orderCol
char * orderCol
Definition
sqlp.h:103
SQLPSTMT::ColWidth
int * ColWidth
Definition
sqlp.h:95
SQLPSTMT::orderDir
int orderDir
Definition
sqlp.h:105
SQLPSTMT::command
int command
Definition
sqlp.h:91
SQLPSTMT::table
char table[200+1]
Definition
sqlp.h:92
SQLPSTMT::ColType
int * ColType
Definition
sqlp.h:94
SQLPSTMT::Val
SQLPVALUE * Val
Definition
sqlp.h:99
SQLPVALUE::d
double d
Definition
sqlp.h:73
SQLPVALUE::s
char * s
Definition
sqlp.h:71
SQLPVALUE::expr
struct sqlpnode * expr
Definition
sqlp.h:74
SQLPVALUE::i
int i
Definition
sqlp.h:72
SQLPVALUE::type
int type
Definition
sqlp.h:70
sqlpnode
Definition
sqlp.h:77
lib
db
sqlp
print.c
Generated on Tue Sep 15 2026 06:57:38 for GRASS 8 Programmer's Manual by
1.9.8