testd.ec
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:7k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  monitor.l - GNU SQL Server DBA utility
  3.  *
  4.  *  This file is a paert of GNU SQL Server
  5.  *
  6.  *  Copyright (c) 1996, Free Software Foundation, Inc.
  7.  *  Developed at Insitute of System Programming of Russian Academy of Science
  8.  *  Written by Michael Kimelman.
  9.  * 
  10.  *  This program is free software; you can redistribute it and/or modify
  11.  *  it under the terms of the GNU General Public License as published by
  12.  *  the Free Software Foundation; either version 2 of the License, or
  13.  *  (at your option) any later version.
  14.  *
  15.  *  This program is distributed in the hope that it will be useful,
  16.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  *  MERCHANTABILITY or  FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  *  GNU General Public License for more details.
  19.  *
  20.  *  You should have received a copy of the GNU General Public License
  21.  *  along with this program; if not, write to the Free Software
  22.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23.  *
  24.  *  Contact:  gss@ispras.ru
  25.  *
  26.  */
  27. #pragma ident "Id: scan_c.l,v 1.155 1995/07/30 13:44:43 kml Exp kml "
  28. #include <string.h>
  29. #include "sql_decl.h"
  30. #include "xmem.h"
  31. #include "dyn_funcs.h"
  32. #include <assert.h>
  33. #include "sql.h"
  34. #include "/home/gsql/zoya/proc" 
  35. static char *statement_scanner_buffer=NULL;
  36. int ARGC;
  37. char **ARGV;
  38. int
  39. SCANNER_NAME(void)
  40. {
  41.   
  42.   if (ARGC>0)
  43.   return 1;
  44. }
  45. int
  46. __SQL_connect(char *host,char *user,char *passwd)
  47. {
  48.   return 0;
  49. }
  50. void
  51. error_rprt(char *st,int rc, char *stmt)
  52. {
  53.   extern char *err_str[];
  54.   fprintf(stderr,"n#### Error occured in '%s'n%snat "%s"n",
  55.           st,err_str[-rc],stmt);
  56. }
  57. int
  58. main(int argc, char *argv[])
  59. {
  60.   int stmt = 0;
  61.   int rc;
  62.   int i,j,t,ll,c,ind,null;
  63.   static char *sps =
  64.     "                                                                       "
  65.     "                                                                       "
  66.     "                                                                       "
  67.     "                                                                       "
  68.     "                                                                       "
  69.     ;
  70.   statement_scanner_buffer = xmalloc(4096*4);
  71.   
  72. #define CHECK(st) if((rc=__SQL_##st)!=0){ error_rprt(#st,rc,statement_scanner_buffer); goto error; }
  73.   sprintf(statement_scanner_buffer,
  74.           "(select * from %s.%s)",
  75.           (argc>2?argv[2]:"DEFINITION_SCHEMA"),
  76.           (argc>1?argv[1]:"SYSTABLES"));
  77.   while(stmt==0)
  78.     {
  79.       char *b;
  80.       int   l = strlen(statement_scanner_buffer);
  81.       int  *clms = NULL;
  82.       int xx;
  83.       
  84.       b = xmalloc(20);
  85.       sprintf(b,"%dth Stmt",stmt++);
  86.       __SQL_prepare(b,statement_scanner_buffer);
  87.       __SQL_allocate_cursor(b,"CURSOR");
  88.       
  89. __SQL_allocate_descr("IN",0);
  90.       
  91. __SQL_allocate_descr("OUT",0);
  92. __SQL_describe(b,1,__SQL_get_descr("IN"));
  93. __SQL_describe(b,0,__SQL_get_descr("OUT"));
  94.  
  95. {
  96. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  97. xx=tmp_descr->count;
  98. }
  99.       clms = (int*)xmalloc(xx*sizeof(int));
  100.      
  101.       /* open cursor and write headers */
  102.       j=1;
  103.       fprintf(stderr,"n|");
  104.       for( i=0; i < xx; i++)
  105.         
  106.           {
  107.           int jj, k = 0,u,t;
  108.           char name[100];
  109.           
  110. {
  111. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  112. int tmp_count=i;
  113. u=tmp_descr->values[tmp_count].unnamed;
  114. }
  115.           if (u)
  116.             jj=fprintf(stderr," col_%03d ",i);
  117.           else
  118.             {
  119.              
  120. {
  121. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  122. int tmp_count=i;
  123. strcpy(name, tmp_descr->values[tmp_count].name);
  124. }
  125.             jj=fprintf(stderr," %s ",name);
  126.             }
  127.           
  128. {
  129. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  130. int tmp_count=i;
  131. t=tmp_descr->values[tmp_count].type;
  132. ll=tmp_descr->values[tmp_count].length;
  133. }
  134.  
  135.        {   sql_type_t tt = pack_type(get_sqltype_code(t),ll,0);
  136.             k = tt.len - jj;
  137.           }
  138.           jj += fprintf(stderr,"%s|",sps+strlen(sps)- (k>0?k:0) );
  139.           clms [i] = jj - 1;
  140.           j += jj;
  141.         }
  142.       /* -------------------------------------------------*/
  143.       fprintf(stderr,"n");
  144.       for(i=j;i--;)
  145.         fprintf(stderr,"-");
  146. {
  147. SQL_DESCR tmp_descr=__SQL_get_descr("IN");
  148. c=tmp_descr->count;
  149. }
  150.       if(c)
  151.         {
  152.    __SQL_open_cursor("CURSOR",__SQL_get_descr("IN"));
  153.          }
  154.       else
  155.         {
  156. __SQL_open_cursor("CURSOR",NULL);
  157.         }
  158.       while(1)
  159.         {
  160.         __SQL_fetch("CURSOR",__SQL_get_descr("OUT"));
  161.          
  162.           if(SQLCODE!=0)
  163.             break;
  164.           
  165.           fprintf(stderr,"n|");
  166.           for (i=0; i < xx; i++)
  167.             {
  168.               int k,t,i_data ;
  169.               short sh_data;
  170.               int kk = 0;
  171.               char buf[4096],cdata[100];
  172.               double d_data;
  173.           
  174. {
  175. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  176. int tmp_count=i;
  177. null=tmp_descr->values[tmp_count].nullable;
  178. }
  179. {
  180. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  181. int tmp_count=i;
  182. ind=tmp_descr->values[tmp_count].indicator;
  183. }
  184.                
  185. {
  186. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  187. int tmp_count=i;
  188. t=tmp_descr->values[tmp_count].type;
  189. }
  190.         if(null && ind<0)
  191.                 sprintf(buf,"null");
  192.               else switch(t)
  193.                 {
  194.                 case __SQL_Char:
  195.                 case __SQL_CharVar:
  196.                 
  197. {
  198. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  199. int tmp_count=i;
  200. PROC_data(tmp_descr->values[tmp_count], &cdata, sizeof(cdata), 0);
  201. }
  202.                 sprintf(buf,"%s",cdata);
  203.                   break;
  204.                 case __SQL_Double: /* DOUBLE */
  205.                 case __SQL_Float: /* FLOAT  */
  206.                  
  207. {
  208. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  209. int tmp_count=i;
  210. PROC_data(tmp_descr->values[tmp_count], &d_data, sizeof(d_data), 0);
  211. }
  212.                  sprintf(buf,"%g",d_data);
  213.                   break;
  214.                 case __SQL_Real: /* REAL   */
  215.                   
  216. {
  217. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  218. int tmp_count=i;
  219. PROC_data(tmp_descr->values[tmp_count], &d_data, sizeof(d_data), 0);
  220. }
  221.                   sprintf(buf,"%g",d_data);
  222.                   break;
  223.                 case __SQL_Int: /* int */
  224.                   
  225. {
  226. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  227. int tmp_count=i;
  228. PROC_data(tmp_descr->values[tmp_count], &i_data, sizeof(i_data), 0);
  229. }
  230.        sprintf(buf,"%X",i_data);
  231.                   break;
  232.                 case __SQL_Short: /* small */
  233.                   
  234. {
  235. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  236. int tmp_count=i;
  237. PROC_data(tmp_descr->values[tmp_count], &sh_data, sizeof(sh_data), 0);
  238. }
  239.        sprintf(buf,"%d",sh_data);
  240.                   break;
  241.                 default:
  242.                   sprintf(buf," **%d** ",t);
  243.                 }
  244.               assert(kk==0);
  245.               k = (clms[i] - strlen(buf))/2; 
  246.                  if (k > 4*clms[i])
  247.                 {
  248.                   /*  fprintf(stderr,"!!");*/
  249.                   k = 0;
  250.                 }
  251.               k = fprintf(stderr,"%s%s", sps + strlen(sps) - (k>0?k:0),buf);
  252.               k = clms[i] - k;
  253.               fprintf(stderr,"%s|", sps + strlen(sps) - (k>0?k:0));
  254.             }
  255.         }
  256.       
  257.       /* -------------------------------------------------*/
  258.       fprintf(stderr,"n");
  259.       for(i=j;i--;)
  260.         fprintf(stderr,"-");
  261.       fprintf(stderr,"nn");
  262.   __SQL_close_cursor("CURSOR");
  263.       
  264. __SQL_deallocate_prepare(b);
  265.         
  266.          error:
  267. {
  268. SQL_DESCR tmp_descr=__SQL_get_descr("IN");
  269. __SQL_deallocate_descr(&tmp_descr);
  270. }
  271.  
  272. {
  273. SQL_DESCR tmp_descr=__SQL_get_descr("OUT");
  274. __SQL_deallocate_descr(&tmp_descr);
  275. }
  276.                xfree(clms);
  277.       xfree(b);
  278.       b = NULL;
  279.     }
  280.   _SQL_commit();
  281.   return 0;
  282. }