print.c

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