00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <grass/sqlp.h>
00023 #include <stdio.h>
00024
00025 static void print_node(SQLPNODE * nptr, int level)
00026 {
00027 int i;
00028
00029 for (i = 0; i < level; i++) {
00030 fprintf(stderr, " ");
00031 }
00032
00033 if (nptr->node_type == SQLP_NODE_EXPRESSION) {
00034 fprintf(stderr, "op: %s\n", sqpOperatorName(nptr->oper));
00035 if (nptr->left) {
00036 print_node(nptr->left, level + 1);
00037 }
00038 if (nptr->right) {
00039 print_node(nptr->right, level + 1);
00040 }
00041 }
00042 else if (nptr->node_type == SQLP_NODE_VALUE) {
00043 switch (nptr->value.type) {
00044 case SQLP_NULL:
00045 fprintf(stderr, "val: NULL\n");
00046 break;
00047 case SQLP_D:
00048 fprintf(stderr, "val: %e\n", nptr->value.d);
00049 break;
00050 case SQLP_I:
00051 fprintf(stderr, "val: %d\n", nptr->value.i);
00052 break;
00053 case SQLP_S:
00054 fprintf(stderr, "val: '%s'\n", nptr->value.s);
00055 break;
00056 }
00057 }
00058 else {
00059 fprintf(stderr, "col: %s\n", nptr->column_name);
00060 }
00061 }
00062
00063 int sqpPrintStmt(SQLPSTMT * st)
00064 {
00065 int i;
00066
00067 fprintf(stderr, "********** SQL PARSER RESULT **********\n");
00068 fprintf(stderr, "INPUT: %s\n", sqlpStmt->stmt);
00069 fprintf(stderr, "COMMAND: ");
00070 switch (sqlpStmt->command) {
00071 case (SQLP_ADD_COLUMN):
00072 fprintf(stderr, "ADD COLUMN\n");
00073 break;
00074 case (SQLP_CREATE):
00075 fprintf(stderr, "CREATE\n");
00076 break;
00077 case (SQLP_DROP):
00078 fprintf(stderr, "DROP\n");
00079 break;
00080 case (SQLP_DROP_COLUMN):
00081 fprintf(stderr, "DROP COLUMN\n");
00082 break;
00083 case (SQLP_INSERT):
00084 fprintf(stderr, "INSERT\n");
00085 break;
00086 case (SQLP_UPDATE):
00087 fprintf(stderr, "UPDATE\n");
00088 break;
00089 case (SQLP_SELECT):
00090 fprintf(stderr, "SELECT\n");
00091 break;
00092 case (SQLP_DELETE):
00093 fprintf(stderr, "DELETE\n");
00094 break;
00095 default:
00096 fprintf(stderr, "UNKNOWN\n");
00097 }
00098
00099 fprintf(stderr, "TABLE: %s\n", sqlpStmt->table);
00100
00101
00102 for (i = 0; i < st->nCol; i++) {
00103 if (sqlpStmt->command == SQLP_CREATE) {
00104 fprintf(stderr, "COLUMN %2d: ", i + 1);
00105 switch (sqlpStmt->ColType[i]) {
00106 case (SQLP_VARCHAR):
00107 fprintf(stderr, "type:varchar width:%d",
00108 sqlpStmt->ColWidth[i]);
00109 break;
00110 case (SQLP_INTEGER):
00111 fprintf(stderr, "type:integer");
00112 break;
00113 case (SQLP_DOUBLE):
00114 fprintf(stderr, "type:double");
00115 break;
00116 case (SQLP_DATE):
00117 fprintf(stderr, "type:date");
00118 break;
00119 case (SQLP_TIME):
00120 fprintf(stderr, "type:time");
00121 break;
00122 default:
00123 fprintf(stderr, "type:unknown");
00124 break;
00125 }
00126 fprintf(stderr, " name:%s\n", sqlpStmt->Col[i].s);
00127 }
00128 else {
00129 fprintf(stderr, "COLUMN %2d: %s\n", i + 1, sqlpStmt->Col[i].s);
00130 }
00131 }
00132
00133
00134 for (i = 0; i < st->nVal; i++) {
00135 fprintf(stderr, "VALUE %2d ", i + 1);
00136 switch (sqlpStmt->Val[i].type) {
00137 case (SQLP_S):
00138 fprintf(stderr, "(string) : %s\n", sqlpStmt->Val[i].s);
00139 break;
00140 case (SQLP_I):
00141 fprintf(stderr, "(integer): %d\n", sqlpStmt->Val[i].i);
00142 break;
00143 case (SQLP_D):
00144 fprintf(stderr, "(float) : %f\n", sqlpStmt->Val[i].d);
00145 break;
00146 case (SQLP_NULL):
00147 fprintf(stderr, "(unknown) : null\n");
00148 break;
00149 case (SQLP_EXPR):
00150 fprintf(stderr, "(expression) :\n");
00151 print_node(sqlpStmt->Val[i].expr, 0);
00152 break;
00153 default:
00154 fprintf(stderr, "unknown\n");
00155 break;
00156 }
00157 }
00158
00159 if (sqlpStmt->upperNodeptr) {
00160 fprintf(stderr, "WHERE:\n");
00161 print_node(sqlpStmt->upperNodeptr, 0);
00162 }
00163
00164
00165 if (sqlpStmt->command == SQLP_SELECT) {
00166 if (sqlpStmt->orderDir) {
00167 fprintf(stderr, "ORDER BY: %s %s\n", sqlpStmt->orderCol,
00168 sqlpStmt->orderDir == 1 ? "ASC" : "DESC");
00169 }
00170 else {
00171 fprintf(stderr, "ORDER BY: %s\n", sqlpStmt->orderCol);
00172 }
00173 }
00174
00175
00176 fprintf(stderr, "***************************************\n");
00177
00178 return (1);
00179 }