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

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  moddump.c - dumping of executable module prepared by synthesator.
  3.  *
  4.  *  This file is a part of GNU SQL Server
  5.  *
  6.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  7.  *  Developed at the Institute of System Programming
  8.  *  This file is written by Konstantin Dyshlevoj
  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.  *  Contacts: gss@ispras.ru
  25.  *
  26.  */
  27. /* $Id: moddump.c,v 1.248 1997/04/24 17:47:19 kml Exp $ */
  28.   
  29. #include "global.h"
  30. #include "syndef.h"
  31. #include <assert.h>
  32. /* This definition must be declared latter than all variables definitions */
  33. #define COMMAND(typ,var) struct S_##typ var; var = *V_PTR(cur, struct S_##typ); 
  34.                          cur += sizeof(struct S_##typ); ALIGN(cur,SZ_LNG);
  35. /*----------------------------------*/
  36. void
  37. DU_Print (VADR V_DU, FILE * out)
  38. {
  39.   DataUnit *DU;
  40.   
  41.   DU = V_PTR (V_DU, DataUnit);
  42.   fprintf (out, "%i:%s ", V_DU, type2str(DU->type));
  43. } /* DU_Print */
  44. void
  45. c_prn (VADR V_DU, FILE * out)
  46. {
  47.   DataUnit *DU;
  48.   TpSet *dat;
  49.   
  50.   DU = V_PTR (V_DU, DataUnit);
  51.   dat = &(DU->dat);
  52.   if (NL_FL (dat) == NULL_VALUE)
  53.     fprintf (out, ":"NULL_VALUE"");
  54.   else
  55.     switch (DU->type.code)
  56.       {
  57.       case T_STR :
  58. fprintf (out, ":"%s"", V_PTR (STR_VPTR (dat), char));
  59. break;
  60.       case T_FLT :
  61. fprintf (out, ":"%f"", FLT_VL (dat));
  62. break;
  63.         
  64.       case T_SRT :
  65. fprintf (out, ":"%hd"", SRT_VL (dat));
  66. break;
  67.       case T_INT :
  68. fprintf (out, ":"%d"", INT_VL (dat));
  69. break;
  70.       case T_LNG :
  71. fprintf (out, ":"%d"", LNG_VL (dat));
  72. break;
  73.       case T_DBL :
  74. fprintf (out, ":"%e"", DBL_VL (dat));
  75. break;
  76.       default : break;
  77.       }
  78.   fprintf (out, ":%s ", type2str(DU->type));
  79. } /* c_prn */
  80.   
  81. void
  82. TrPrint (VADR off, i4_t spc, FILE * out)
  83. {
  84.   struct Node *Nd;
  85.   i4_t i;
  86.   
  87.   if (!off)
  88.     return;
  89.   Nd = V_PTR (off, struct Node);
  90.   for (i = 0; i < spc; i++)
  91.     fprintf (out, " ");
  92.   {
  93.     char tpstr[40];
  94.     conv_type (tpstr, &(Nd->Ty), TRANS_BACK);
  95.     fprintf (out, "[%d: %s, Depend=%i, Handle=%i, Ty:%s, Ptr=%i",
  96.      off, NAME(Nd->code), Nd->Depend, Nd->Handle, tpstr, Nd->Ptr.off);
  97.   }
  98.   if (Nd->code == CONST)
  99.     c_prn (Nd->Ptr.off, out);
  100.   if (Nd->code == CALLPR)
  101.     {
  102.       PrepSQ *InitDt = V_PTR (Nd->Dn.off, PrepSQ);
  103.       
  104.       fprintf (out, ", ProcAdr =%i, GoUpNeed =%i]n",
  105.        (i4_t)(InitDt->ProcAdr), InitDt->GoUpNeed);
  106.       return;
  107.     }
  108.   else
  109.     fprintf (out, "]n");
  110.     
  111.   TrPrint (Nd->Dn.off, spc + 3, out);
  112.   TrPrint (Nd->Rh.off, spc, out);
  113. }
  114. void
  115. constr_print (VADR V_header, FILE *out)
  116. {
  117.   S_ConstrHeader *header;
  118.   S_Constraint *constr;
  119.   i4_t i, j;
  120.   VADR *constr_arr;
  121.   sql_type_t *tp;
  122.   char *str = "";
  123.   
  124.   if (!V_header)
  125.     return;
  126.   header = V_PTR (V_header, S_ConstrHeader);
  127.   fprintf (out, "n  Constraints :n  scan = %d untabid = %d tab_col_num = %dn",
  128.    header->scan, header->untabid, header->tab_col_num);
  129.   fprintf (out, "  old_vl_cnt = %d, old_vl_nums : (", header->old_vl_cnt);
  130.   for (i = 0; i < header->old_vl_cnt; i++)
  131.     fprintf (out, "%i ", V_PTR (header->old_vl_nums, i4_t)[i]);
  132.   fprintf (out, ") old_vl_types : (");
  133.   tp = V_PTR (header->old_vl_types, sql_type_t );
  134.   for (i = 0; i < header->old_vl_cnt; i++)
  135.     fprintf (out, "%s,", type2str(tp[i]));
  136.   
  137.   fprintf (out, ")n  constr_arr : constr_num = %dn", header->constr_num);
  138.   
  139.   constr_arr = V_PTR (header->constr_arr, VADR);
  140.   for (j = 0; j < header->constr_num; j++)
  141.     {
  142.       constr = V_PTR (constr_arr[j], S_Constraint);
  143.       fprintf (out, "n    %s :", NAME (constr->constr_type));
  144.       switch (constr->constr_type)
  145. {
  146. case FOREIGN :
  147.   fprintf (out, " Ind: unindid = %d untabid = %dn",
  148.    (i4_t)V_PTR (constr->object, Indid)->unindid,
  149.    (i4_t)V_PTR (constr->object, Indid)->tabid.untabid);
  150.   break;
  151.       
  152. case REFERENCE :
  153.   fprintf (out, " untabid = %dn", (i4_t)V_PTR (constr->object, Tabid)->untabid);
  154.   break;
  155.       
  156. case VIEW :
  157.           str = "from WHERE in VIEW definition";
  158. case CHECK :
  159.   fprintf (out, "  checking tree %s:n", str);
  160.   TrPrint (constr->object, 6, out);
  161.   break;
  162.   
  163. default : break;
  164. }
  165.       if (constr->constr_type == FOREIGN || constr->constr_type == REFERENCE)
  166. {
  167.   fprintf (out, "      colnum = %dn      col_arg_list : (", constr->colnum);
  168.   for (i = 0; i < constr->colnum; i++)
  169.     fprintf (out, "%i ", V_PTR (constr->col_arg_list, i2_t)[i]);
  170.   fprintf (out, ")n      col_ref_list : (");
  171.   for (i = 0; i < constr->colnum; i++)
  172.     fprintf (out, "%i ", V_PTR (constr->col_ref_list, i2_t)[i]);
  173.   fprintf (out, ")n");
  174. }
  175.     }
  176. } /* constr_print */
  177. void
  178. ModDump (FILE * out)
  179. /* making module (from current segment) *
  180.  * dump & putti術 it to file FName      */
  181. {
  182.   VADR cur, *ST, goto_place = VNULL;
  183.   enum CmdCode code;
  184.   i4_t SC, SectCnt;
  185.   if (!(ST = V_PTR (*V_PTR ((VADR) 4, VADR), VADR)))
  186.     return;
  187.   SectCnt = (i4_t) (ST[0]);
  188.   fprintf (out, "  Offs. from SectTable:n");
  189.   for (SC = 1; ST[SC]; SC++)
  190.     if (SC <= SectCnt)
  191.       fprintf (out, "    Sect %i =%in", SC, ST[SC]);
  192.     else
  193.       fprintf (out, "    Proc %i =%in", SC-SectCnt, ST[SC]);
  194.   for (SC = 1; (cur = ST[SC]); SC++)
  195.     {
  196.       if (SC <= SectCnt)
  197. fprintf (out, "################### Section %i ##################n",
  198.  SC);
  199.       else
  200. fprintf (out, "################## Procedure %i #################n",
  201.  SC-SectCnt);
  202.       do
  203. {
  204.   fprintf (out, "n-- %i ", cur);
  205.   code = *V_PTR (cur, enum CmdCode);
  206.   cur += sizeof (enum CmdCode);
  207.           ALIGN(cur,SZ_LNG);
  208.   switch (code)
  209.     {
  210.       /*----------------------------------*/
  211.     case CursorHeader:
  212.       {
  213. COMMAND (CursorHeader, CrsHdr);
  214. fprintf (out, "-- CursorHeadern");
  215. constr_print (CrsHdr.DelCurConstr, out);
  216. break;
  217.       }
  218.       /*----------------------------------*/
  219.     case Drop_Reg:
  220.       {
  221. i4_t i;
  222. COMMAND (Drop_Reg, DR);
  223. fprintf (out, "-- Drop_Reg:nScanNum=%d TabdNum=%dn",
  224.  DR.ScanNum, DR.TabdNum);
  225. fprintf (out, "List of Scan: (");
  226. for (i = 0; i < DR.ScanNum; i++)
  227.   fprintf (out, "%i, ", V_PTR (DR.Scan, VADR)[i]);
  228. fprintf (out, ")nList of Tabd: (");
  229. for (i = 0; i < DR.TabdNum; i++)
  230.   fprintf (out, "%i, ", V_PTR (DR.Tabd, VADR)[i]);
  231. fprintf (out, ")n");
  232. break;
  233.       }
  234.       /*----------------------------------*/
  235.     case OPSCAN:
  236.       {
  237. i4_t i;
  238. VADR *Tab_SP, *Ind_SP;
  239. Tabid *Tbd;
  240. Indid *Ind;
  241. COMMAND (OPSCAN, scan);
  242. fprintf (out, "-- OPSCAN:n");
  243. fprintf (out, "Scan=%i Tid=%i OperType=%c mode=\%in",
  244.  scan.Scan, scan.Tid, scan.OperType, scan.mode);
  245. fprintf (out, " nr=%i nl=%i nm=%i ic=%i Exit=%in",
  246.  scan.nr, scan.nl, scan.nm, scan.ic, scan.Exit);
  247. if (scan.OperType == 'i')
  248.   {
  249.     Ind = &(V_PTR (scan.Tid, UnId)->i);
  250.     fprintf (out, "    USING INDEX : unindid=%d untabid=%dn",
  251.      (i4_t)Ind->unindid, (i4_t)Ind->tabid.untabid);
  252.   }
  253. else
  254.   {
  255.     assert (scan.OperType == 't');
  256.     Tbd = &(V_PTR (scan.Tid, UnId)->t);
  257.     fprintf (out, "    TABLE : untabid=%dn", (i4_t)Tbd->untabid);
  258.   }
  259. fprintf (out, "List of rlist:n(");
  260. for (i = 0; i < scan.nr; i++)
  261.   fprintf (out, "%i ", V_PTR (scan.rlist, i4_t)[i]);
  262. fprintf (out, ")nList of mlist:n(");
  263. for (i = 0; i < scan.nm; i++)
  264.   fprintf (out, "%i ", V_PTR (scan.mlist, i4_t)[i]);
  265. fprintf (out, ")n");
  266. if (scan.nl)
  267.   {
  268.     fprintf (out, "List of Simple Predicates for Table:n");
  269.     Tab_SP = V_PTR (scan.list, VADR);
  270.     for (i = 0; i < scan.nl; i++)
  271.       if (Tab_SP[i])
  272. {
  273.   fprintf (out, "for column %i :n", i);
  274.   TrPrint (Tab_SP[i], 4, out);
  275. }
  276.   }
  277. if (scan.ic)
  278.   {
  279.     fprintf (out, "List of Simple Predicates for Index:n");
  280.     Ind_SP = V_PTR (scan.range, VADR);
  281.     for (i = 0; i < scan.ic; i++)
  282.       if (Ind_SP[i])
  283. {
  284.   fprintf (out, "for column %i :n", i);
  285.   TrPrint (Ind_SP[i], 4, out);
  286. }
  287.   }
  288. break;
  289.       } /*end of SCAN */
  290.       /*--------------------------------------------------*/
  291.     case TMPSCN:
  292.       {
  293. i4_t i;
  294. VADR *Tab_SP, *Ind_SP;
  295. COMMAND (TMPSCN, scan);
  296. fprintf (out, "-- TMPSCN:n");
  297. fprintf (out, "TidFrom=%i TidTo=%i OperType=%c nr=%in",
  298.  scan.TidFrom, scan.TidTo, scan.OperType, scan.nr);
  299. fprintf (out, "List of rlist:n(");
  300. for (i = 0; i < scan.nr; i++)
  301.   fprintf (out, "%i ", V_PTR (scan.rlist, i4_t)[i]);
  302. if (scan.nl)
  303.   {
  304.     fprintf (out, "List of Simple Predicates for Table:n");
  305.     Tab_SP = V_PTR (scan.list, VADR);
  306.     for (i = 0; i < scan.nl; i++)
  307.       if (Tab_SP[i])
  308. {
  309.   fprintf (out, "for column %i :n", i);
  310.   TrPrint (Tab_SP[i], 4, out);
  311. }
  312.   }
  313. if (scan.ic)
  314.   {
  315.     fprintf (out, "List of Simple Predicates for Index:n");
  316.     Ind_SP = V_PTR (scan.range, VADR);
  317.     for (i = 0; i < scan.ic; i++)
  318.       if (Ind_SP[i])
  319. {
  320.   fprintf (out, "for column %i :n", i);
  321.   TrPrint (Ind_SP[i], 4, out);
  322. }
  323.   }
  324. break;
  325.       } /*end of TMPSCN */
  326.       /*-----------------------------------*/
  327.     case TMPCRE:
  328.       {
  329. i4_t i;
  330. COMMAND (TMPCRE, tmp);
  331. fprintf (out, "-- TMPCRE:n");
  332. fprintf (out, "Tid=%i colnum=%d nnulnum=%dn",
  333.  tmp.Tid, tmp.colnum, tmp.nnulnum);
  334. fprintf (out, "List of coltype: (");
  335. for (i = 0; i < tmp.colnum; i++)
  336.   fprintf (out, "{%i,%i},", (V_PTR (tmp.coldescr, sql_type_t )[i]).code,
  337.    (V_PTR (tmp.coldescr, sql_type_t )[i]).len);
  338. fprintf (out, ")n");
  339.       }
  340.       break;
  341.       /*-------------------------------------------*/
  342.     case SORTTBL:
  343.       {
  344. i4_t i;
  345. COMMAND (SORTTBL, scan);
  346. fprintf (out, "-- SORT:n");
  347. fprintf (out, "TidIn=%i TidOut=%i fl=%c order=%c ns=%in",
  348.      scan.TidIn, scan.TidOut, scan.fl, scan.order, scan.ns);
  349. fprintf (out, "List of rlist:n(");
  350. for (i = 0; i < scan.ns; i++)
  351.   fprintf (out, "%i ", V_PTR (scan.rlist, i4_t)[i]);
  352. fprintf (out, ")n");
  353.       }
  354.       break;
  355.       /*-------------------------------------------*/
  356.     case MKUNION:
  357.       {
  358. COMMAND (MKUNION, scan);
  359. fprintf (out, "-- MKUNION:n");
  360. fprintf (out, "TidIn1=%i TidIn2=%i TidOut=%in",
  361.      scan.TidIn1, scan.TidIn2, scan.TidOut);
  362.       }
  363.       break;
  364.       /*-------------------------------------------*/
  365.     case READROW:
  366.       {
  367. i4_t i;
  368. COMMAND (READROW, fndr);
  369. fprintf (out, "-- READROW:n");
  370. fprintf (out, "Scan.off=%i nr=%i n", fndr.Scan.off, fndr.nr);
  371. fprintf (out, "List offsets in ColPtr: (");
  372. for (i = 0; i < fndr.nr; i++)
  373.   DU_Print ((V_PTR (fndr.ColPtr.off, PSECT_PTR)[i]).off, out);
  374. fprintf (out, ")nList of rlist: (");
  375. for (i = 0; i < fndr.nr; i++)
  376.   fprintf (out, "%i ", V_PTR (fndr.rlist.off, i4_t)[i]);
  377. fprintf (out, ")n");
  378. break;
  379.       } /*end of READROW */
  380.       /*-------------------------------------------*/
  381.     case FINDROW:
  382.       {
  383. i4_t i;
  384. COMMAND (FINDROW, fndr);
  385. fprintf (out, "-- FINDROW:n");
  386. fprintf (out, "Scan=%i nr=%i Exit=%in",
  387.  fndr.Scan.off, fndr.nr, fndr.Exit.off);
  388. fprintf (out, "List of ColPtr: (");
  389. for (i = 0; i < fndr.nr; i++)
  390.   DU_Print ((V_PTR (fndr.ColPtr.off, PSECT_PTR)[i]).off, out);
  391. fprintf (out, ")n");
  392. break;
  393.       } /*end of FINDROW */
  394.       /*-------------------------------------------*/
  395.     case INSTAB:
  396.       {
  397. COMMAND (INSTAB, fndr);
  398. fprintf (out, "-- INSTAB:n");
  399. fprintf (out, "TidFrom=%i (untabid = %d)  TidTo=%i (untabid = %d)n",
  400.  fndr.TidFrom, (i4_t)V_PTR (fndr.TidFrom, Tabid)->untabid,
  401.  fndr.TidTo,   (i4_t)V_PTR (fndr.TidTo, Tabid)->untabid);
  402. break;
  403.       } /*end of INSTAB */
  404.       /*-------------------------------------------*/
  405.     case INSROW:
  406.       {
  407. i4_t i;
  408. PSECT_PTR *Trs;
  409. sql_type_t *tp;
  410. COMMAND (INSROW, fndr);
  411. fprintf (out, "-- INSROW:n");
  412. fprintf (out, "Tid=%i  nv=%inList of InsList:n",
  413.  fndr.Tid.off, fndr.nv);
  414. fprintf (out, "List of coltype: (");
  415. tp = V_PTR (fndr.ClmTp.off, sql_type_t );
  416. for (i = 0; i < fndr.nv; i++)
  417.   fprintf (out, "%s,", type2str(tp[i]));
  418. fprintf (out, ")n");
  419. Trs = V_PTR (fndr.InsList.off, PSECT_PTR);
  420. for (i = 0; i < fndr.nv; i++)
  421.   {
  422.     fprintf (out, "-------------Tree offset=%i-------------n",
  423.      Trs[i].off);
  424.     TrPrint (Trs[i].off, 4, out);
  425.   }
  426. constr_print (fndr.Constr.off, out);
  427. break;
  428.       } /*end of INSROW */
  429.       /*-------------------------------------------*/
  430.     case INSLIST:
  431.       {
  432. i4_t i;
  433. i2_t *len;
  434. sql_type_t *tp;
  435. VADR *cptr;
  436. COMMAND (INSLIST, fndr);
  437. fprintf (out, "-- INSLIST:n");
  438. fprintf (out, "Tid=%i  nv=%i credat_adr=%i cretime_adr=%in",
  439.  fndr.Tid.off, fndr.nv, (i4_t)(fndr.credat_adr.off), 
  440.  (i4_t)(fndr.cretime_adr.off));
  441. fprintf (out, "List of coltype: (");
  442. tp = V_PTR (fndr.col_types.off, sql_type_t );
  443. for (i = 0; i < fndr.nv; i++)
  444.   fprintf (out, "%s,", type2str(tp[i]));
  445. fprintf (out, ")n");
  446. if (fndr.len.off)
  447.   {
  448.     fprintf (out, "List of lengths:n    (");
  449.     len = V_PTR (fndr.len.off, i2_t);
  450.     for (i = 0; i < fndr.nv; i++)
  451.       fprintf (out, "%d, ", len[i]);
  452.     fprintf (out, ")n");
  453.   }
  454. fprintf (out,"List of col_ptr:n     (");
  455. cptr = V_PTR (fndr.col_ptr.off, VADR);
  456. for (i = 0; i < fndr.nv; i++)
  457.   fprintf (out, "%i,", cptr[i]);
  458. fprintf (out, ")n");
  459. break;
  460.       } /*end of INSLIST */
  461.       /*-------------------------------------------*/
  462.     case MODROW:
  463.       {
  464. i4_t i;
  465. PSECT_PTR *Trs;
  466. sql_type_t *tp;
  467. COMMAND (MODROW, fndr);
  468. fprintf (out, "-- MODROW:n");
  469. fprintf (out, "Scan = %i  nl = %in", fndr.Scan.off, fndr.nl);
  470. fprintf (out, "List of mlist: (");
  471. if (fndr.mlist.off)
  472.   for (i = 0; i < fndr.nl; i++)
  473.     fprintf (out, "%i ", V_PTR (fndr.mlist.off, i4_t)[i]);
  474. fprintf (out, ")n");
  475. fprintf (out, "List of coltype: (");
  476. tp = V_PTR (fndr.ClmTp.off, sql_type_t );
  477. for (i = 0; i < fndr.nl; i++)
  478.   fprintf (out, "%s,", type2str(tp[i]));
  479. fprintf (out, ")n");
  480. fprintf (out, "List of OutList: (");
  481. Trs = V_PTR (fndr.OutList.off, PSECT_PTR);
  482. for (i = 0; i < fndr.nl; i++)
  483.   {
  484.     fprintf (out, "-------------Tree offset=%i-------------n",
  485.      Trs[i].off);
  486.     TrPrint (Trs[i].off, 4, out);
  487.   }
  488. constr_print (fndr.Constr.off, out);
  489. break;
  490.       } /*end of MODROW */
  491.       /*-------------------------------------------*/
  492.     case DELROW:
  493.       {
  494. COMMAND (DELROW, cls);
  495. fprintf (out, "-- DELROW(Scan=%i)n", cls.Scan);
  496. constr_print (cls.Constr, out);
  497. break;
  498.       } /*end of DELROW */
  499.       /*-------------------------------------------*/
  500.     case CLOSE:
  501.       {
  502. COMMAND (CLOSE, cls);
  503. fprintf (out, "-- CLOSE ( Scan=%i )n", cls.Scan);
  504. break;
  505.       } /*end of CLOSE */
  506.       /*-------------------------------------------*/
  507.     case DROPBASE:
  508.       {
  509. COMMAND (DROPBASE, tmp);
  510. fprintf (out, "-- DROPBASE ( untabid=%i )n", tmp.untabid);
  511.       }
  512.       break;
  513.       /*-------------------------------------------*/
  514.     case DROPTTAB:
  515.       {
  516. COMMAND (DROPTTAB, tmp);
  517. fprintf (out, "-- DROPTTAB ( Tid=%i )n", tmp.Tid);
  518.       }
  519.       break;
  520.       /*-------------------------------------------*/
  521.     case MKGROUP:
  522.       {
  523. i4_t i;
  524. COMMAND (MKGROUP, cls);
  525. fprintf (out, "-- MKGROUP:n");
  526. fprintf (out, "TidIn=%i TidOut=%i order=%c ng=%in",
  527.  cls.TidIn, cls.TidOut, cls.order, cls.ng);
  528. fprintf (out, "List of glist:n(");
  529. for (i = 0; i < cls.ng; i++)
  530.   fprintf (out, "%i ", V_PTR (cls.glist, i4_t)[i]);
  531. fprintf (out, ")n nf=%in", cls.nf);
  532. fprintf (out, "List of flist:n(");
  533. for (i = 0; i < cls.nf; i++)
  534.   fprintf (out, "%i ", V_PTR (cls.flist, i4_t)[i]);
  535. fprintf (out, ")nList of fl:n(");
  536. for (i = 0; i < cls.nf; i++)
  537.   fprintf (out, "%i ", V_PTR (cls.fl, char)[i]);
  538. fprintf (out, ")n");
  539. break;
  540.       } /*end of GROUP */
  541.       /*-------------------------------------------*/
  542.     case FUNC:
  543.       {
  544. i4_t i;
  545. VADR *Tab_SP, *Ind_SP;
  546. COMMAND (FUNC, cls);
  547. fprintf (out, "-- FUNC:n");
  548. fprintf (out, "Tid=%i OperType=%c nl=%i Exit=%in",
  549.  cls.Tid.off, cls.OperType, cls.nl, cls.Exit.off);
  550. if (cls.nl)
  551.   {
  552.     fprintf (out, "List of Simple Predicates for Table:n");
  553.     Tab_SP = V_PTR (cls.list.off, VADR);
  554.     for (i = 0; i < cls.nl; i++)
  555.       if (Tab_SP[i])
  556. {
  557.   fprintf (out, "for column %i :n", i);
  558.   TrPrint (Tab_SP[i], 4, out);
  559. }
  560.   }
  561. if (cls.ic)
  562.   {
  563.     fprintf (out, "List of Simple Predicates for Index:n");
  564.     Ind_SP = V_PTR (cls.range.off, VADR);
  565.     for (i = 0; i < cls.ic; i++)
  566.       if (Ind_SP[i])
  567. {
  568.   fprintf (out, "for column %i :n", i);
  569.   TrPrint (Ind_SP[i], 4, out);
  570. }
  571.   }
  572. fprintf (out, "List of flist:n(");
  573. for (i = 0; i < cls.nf; i++)
  574.   fprintf (out, "%i ", V_PTR (cls.flist.off, i4_t)[i]);
  575. fprintf (out, ")nList of fl:n(");
  576. for (i = 0; i < cls.nf; i++)
  577.   fprintf (out, "%i ", V_PTR (cls.fl.off, char)[i]);
  578. fprintf (out, ")nList of colval: (");
  579. for (i = 0; i < cls.nf; i++)
  580.   DU_Print ((V_PTR (cls.colval.off, PSECT_PTR)[i]).off, out);
  581. fprintf (out, ")n");
  582. break;
  583.       } /*end of FUNC */
  584.       /*-------------------------------------------------*/
  585.     case until:
  586.       {
  587. COMMAND (until, utl);
  588. fprintf (out, "-- until:n");
  589. fprintf (out, "Offs of: cond=%i ret=%in", utl.cond.off,
  590.  utl.ret.off);
  591. TrPrint (utl.cond.off, 4, out);
  592. break;
  593.       } /*end of until */
  594.       /*-------------------------------------------*/
  595.     case RetPar:
  596.       {
  597. i4_t i;
  598. COMMAND (RetPar, retp);
  599. fprintf (out, "-- RetPar:n");
  600. fprintf (out, ", ExitFlag = %d OutNum=%i nList of OutList:n",
  601.  (i4_t)(retp.ExitFlag), retp.OutNum);
  602. for (i = 0; i < retp.OutNum; i++)
  603.   {
  604.     fprintf (out, "-------------Tree offset=%i-------------n",
  605.      (V_PTR (retp.OutList.off, PSECT_PTR)[i]).off);
  606.     TrPrint ((V_PTR (retp.OutList.off, PSECT_PTR)[i]).off, 4, out);
  607.   }
  608. break;
  609.       } /*end of RetPar*/
  610.       /*-------------------------------------------*/
  611.     case SavePar:
  612.       {
  613. i4_t i;
  614. COMMAND (SavePar, savp);
  615. fprintf (out, "-- SavePar:n");
  616. fprintf (out, "ParamNum=%i nList of PlaceOff: (", savp.ParamNum);
  617. for (i = 0; i < savp.ParamNum; i++)
  618.   DU_Print ((V_PTR (savp.PlaceOff.off, PSECT_PTR)[i]).off, out);
  619. fprintf (out, ")n");
  620. break;
  621.       } /*end of SavePar*/
  622.       /*-------------------------------------------*/
  623.     case COND_EXIT:
  624.       {
  625. COMMAND (COND_EXIT, CE);
  626. fprintf (out, "-- COND_EXIT:n");
  627. fprintf (out, "-------------Tree offset=%i-------------n",
  628.  CE.Tree.off);
  629. TrPrint (CE.Tree.off, 4, out);
  630. break;
  631.       } /*end of COND_EXIT */
  632.       /*-------------------------------------------*/
  633.     case next_vm_piece:
  634.       {
  635. cur = goto_place;
  636. fprintf (out, "--  next_vm_piece: %in", goto_place);
  637. break;
  638.       } /*end of next_vm_piece */
  639.       /*-------------------------------------------*/
  640.     case GoTo:
  641.       {
  642. COMMAND (GoTo, savv);
  643. goto_place = savv.Branch.off;
  644. fprintf (out, "-- GoTo : %in", goto_place);
  645. break;
  646.       } /*end of GOTO */
  647.       /*-------------------------------------------*/
  648.     case SetHandle:
  649.       fprintf (out, "-- SetHandle:n");
  650.       {
  651. i4_t i;
  652. COMMAND (SetHandle, sh);
  653. fprintf (out, "Bit=%i TrCnt=%dnList of Trees: (", sh.Bit, sh.TrCnt);
  654. for (i = 0; i < sh.TrCnt; i++)
  655.   fprintf (out, "%i ", (V_PTR (sh.Trees.off, PSECT_PTR)[i]).off);
  656. fprintf (out, ")n");
  657. break;
  658.       } /*end of SetHandle */
  659.       /*-------------------------------------------*/
  660.     case end:
  661.       fprintf (out, "-- END:n");
  662.       break; /*end of END */
  663.       /*-------------------------------------------*/
  664.     case ERROR:
  665.       {
  666. COMMAND (ERROR, er);
  667. fprintf (out, "-- ERROR = %dn", er.Err);
  668. break; /*end of ERROR */
  669.       }
  670.       /*-------------------------------------------*/
  671.     case CRETAB:
  672.       {
  673. i4_t i;
  674. COMMAND (CRETAB, tmp);
  675. fprintf (out, "-- CRETAB:n");
  676. fprintf (out, "tabname='%s' owner='%s'n",
  677.  V_PTR (tmp.tabname, char), V_PTR (tmp.owner, char));
  678. fprintf (out, "segid=%d colnum=%d nncolnum=%d tabid=%dn",
  679.  tmp.segid, tmp.colnum, tmp.nncolnum, (i4_t)(tmp.tabid));
  680. fprintf (out, "List of coltype: (");
  681.                 {
  682.                   sql_type_t *tp = V_PTR (tmp.coldescr, sql_type_t);
  683.                   for (i = 0; i < tmp.colnum; i++)
  684.                     fprintf (out, "%s,", type2str(tp[i]));
  685.                 }
  686.                 fprintf (out, ")n");
  687.                   
  688.       }
  689.       break;
  690.       /*-------------------------------------------*/
  691.     case CREIND:
  692.       {
  693. i4_t i;
  694. COMMAND (CREIND, tmp);
  695. fprintf (out, "-- CREIND:n");
  696. fprintf (out, "tabid=%d indid=%d uniq_fl=\%i colnum=%dn",
  697.  (i4_t)(tmp.tabid), (i4_t)(tmp.indid), tmp.uniq_fl, tmp.colnum);
  698. fprintf (out, "List of columns' numbers : (");
  699. for (i = 0; i < tmp.colnum; i++)
  700.   fprintf (out, "%i ", V_PTR (tmp.clmlist, i4_t)[i]);
  701. fprintf (out, ")n");
  702.       }
  703.       break;
  704.       /*-------------------------------------------*/
  705.     case PRIVLG:
  706.       {
  707. i4_t i;
  708. COMMAND (PRIVLG, tmp);
  709. fprintf (out, "-- PRIVLG:n");
  710. fprintf (out, "untabid=%d owner='%s' user='%s'n",
  711.  *V_PTR(tmp.untabid, i4_t), V_PTR(tmp.owner, char), 
  712.  V_PTR(tmp.user, char));
  713. if (tmp.privcodes)
  714.   fprintf (out,"  privcodes='%s'n", V_PTR(tmp.privcodes, char));
  715. if (tmp.un)
  716.   {
  717.     fprintf (out, "UPDATE: count=%d , columns : (", tmp.un);
  718.     for (i = 0; i < tmp.un; i++)
  719.       fprintf (out, "%i ", V_PTR (tmp.ulist, i4_t)[i]);
  720.     fprintf (out, ")n");
  721.   }
  722. if (tmp.rn)
  723.   {
  724.     fprintf (out, "REFERENCES: count=%d , columns : (", tmp.rn);
  725.     for (i = 0; i < tmp.rn; i++)
  726.       fprintf (out, "%i ", V_PTR (tmp.rlist, i4_t)[i]);
  727.     fprintf (out, ")n");
  728.   }
  729.       }
  730.       break;
  731.     default:
  732.       fprintf (out, "? ?!! UNRECOGNIZED COMMAND ? ?!!n");
  733.     }
  734. }
  735.       while (code != end);
  736.     } /* end of 'for' with ST */
  737.   fprintf (out, "************** end of module.");
  738. } /* ModDump */