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