print.c

Go to the documentation of this file.
00001 /*****************************************************************************
00002 *
00003 * MODULE:       SQL statement parser library 
00004 *               
00005 * AUTHOR(S):    lex.l and yac.y were originaly taken from unixODBC and
00006 *               probably written by Peter Harvey <pharvey@codebydesigns.com>,
00007 *               modifications and other code by Radim Blazek
00008 *
00009 * PURPOSE:      Parse input string containing SQL statement to 
00010 *               SQLPSTMT structure.
00011 *               SQL parser may be used by simple database drivers. 
00012 *
00013 * COPYRIGHT:    (C) 2000 by the GRASS Development Team
00014 *
00015 *               This program is free software under the GNU General Public
00016 *               License (>=v2). Read the file COPYING that comes with GRASS
00017 *               for details.
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 { /* SQLP_NODE_COLUMN */
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     /* columns */
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     /* values */
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 

Generated on Sun Apr 6 17:31:38 2008 for GRASS by  doxygen 1.5.5