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

SQL Server

开发平台:

Unix_Linux

  1. /* 
  2.  *  typepi.h -  file with data types for synthesator and interpretator
  3.  *              of GNU SQL compiler
  4.  *                
  5.  *  This file is a part of GNU SQL Server
  6.  *
  7.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  8.  *  Developed at the Institute of System Programming
  9.  *  This file is written by Konstantin Dyshlevoj 
  10.  * 
  11.  *  This program is free software; you can redistribute it and/or modify
  12.  *  it under the terms of the GNU General Public License as published by
  13.  *  the Free Software Foundation; either version 2 of the License, or
  14.  *  (at your option) any later version.
  15.  *
  16.  *  This program is distributed in the hope that it will be useful,
  17.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  *  GNU General Public License for more details.
  20.  *
  21.  *  You should have received a copy of the GNU General Public License
  22.  *  along with this program; if not, write to the Free Software
  23.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  24.  *
  25.  *  Contacts: gss@ispras.ru
  26.  *
  27.  */
  28. /* $Id: typepi.h,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  29. #ifndef __TYPEPI_H__
  30. #define __TYPEPI_H__
  31. #include <sql_type.h>
  32. #include <vmemory.h>
  33. #include <type_lib.h>
  34. #define V_PTR(adr,typ) ((typ *)vpointer(adr))
  35. #define ADR(ptr,elem)  V_PTR( ((ptr)->elem).off, char )
  36. #define TP_ADR(ptr,elem,typ) V_PTR( ((ptr)->elem).off, typ )
  37. #define V_ADR(ptr,elem,typ)  V_PTR( (ptr)->elem,typ )
  38. #define VMALLOC(n,typ) vmalloc( (n)*sizeof(typ) )
  39. #define P_VMALLOC(var,n,typ) 
  40.         var = V_PTR (V_##var = vmalloc ((n) * sizeof (typ)), typ)
  41. #define PUT_STRING(to, str) {                                         
  42.                               VADR V_adr; char *adr;                  
  43.                               P_VMALLOC(adr, strlen (str) + 1, char); 
  44.                               strcpy (adr, str);                      
  45.                               to = V_adr;                             
  46.     }
  47. #define CH_ALL     'A'
  48. #define CH_UNIC    'U'
  49. #define CH_INC     'A'
  50. #define CH_DEC     'D'
  51. #define CH_TRUE    0
  52. #define CH_FLS     1
  53. #define CH_STNDR   0
  54. #define CH_TAB     't'
  55. #define CH_INDX    'i'
  56. #define CH_FLTR    'f'
  57. #define SEC_VW     CH_TAB
  58. #define IND_VW     CH_INDX
  59. #define FLT_VW     CH_FLTR
  60. #define JON_VW     'j'
  61. enum CmdCode {OPSCAN, TMPSCN, TMPCRE, SORTTBL, READROW, FINDROW, INSROW,
  62.       INSLIST, MODROW, DELROW, CLOSE, DROPTTAB, MKGROUP, FUNC,
  63.       until, RetPar, SavePar, GoTo, end, SetHandle, ERROR,
  64.       CursorHeader, MKUNION, Procedure, COND_EXIT, CRETAB,
  65.       DROPBASE, CREIND, PRIVLG, Drop_Reg, INSTAB, next_vm_piece};
  66. /* All fields(-pointers) of structures from module have type *
  67.  * PSECT_PTR . In field out of such union - virtual address. */
  68. typedef struct {
  69.   /* this structure is used for calling *
  70.    * procedure for SubQuery handling    */
  71.   VADR ProcAdr;       /* Procedure beginning address               */
  72.   DataUnit ToDtStack; /* This element must be putted to data stack */
  73.   char GoUpNeed;      /* = 1 if there is needed to go up in tree   */
  74.       /* after procedure calling, = 0 - stand here */
  75. } PrepSQ;
  76. #define NL_FL(x)    ((x)->nl_fl   )
  77. #define MAX_LEN(x)  ((x)->max_len )
  78. #define VL(x)       ((x)->val)
  79. #define STR_PTR(x)  ((x)->val.StrPtr.adr)
  80. #define STR_VPTR(x) ((x)->val.StrPtr.off)
  81. #define SRT_VL(x)   ((x)->val.Srt )
  82. #define INT_VL(x)   ((x)->val.Iint)
  83. #define LNG_VL(x)   ((x)->val.Lng )
  84. #define FLT_VL(x)   ((x)->val.Flt )
  85. #define DBL_VL(x)   ((x)->val.Dbl )
  86. /***************************************************************
  87.  *      some structures for interpretator work management      *
  88.  ***************************************************************/
  89. struct S_CursorHeader {  /* information for work with cursor         */
  90.   
  91.       VADR CursName;     /* Name of cursor ( for external references)*/ 
  92.       VADR DelCurConstr; /* pointer to structure S_ConstrHeader for  *
  93.           * DELETE CURRENT operation                 */
  94.       char *Cur;         /* address of work with cursor continuing   */
  95.       char OpFl;         /* flag of cursor state                     */
  96.    } ;
  97. struct S_Drop_Reg {      /* addresses for scans & temporary tables'  *
  98.   * identifiers registration ( for possible  *
  99.   * EXIT from current segment ).             */
  100.   
  101.       i4_t ScanNum;       /* Number of elements in array Scan         */
  102.       VADR Scan;         /* array of pointers (VADR) to Scanid       */
  103.  /* for  DELROW & CLOSE operations           */
  104.       i4_t TabdNum;       /* Number of elements in array Tabd         */
  105.       VADR Tabd;         /* array os pointers (VADR) to TabId        */
  106.  /* for DROPTTAB making in CLOSE operation   */
  107.    } ;
  108. typedef union {
  109.   Tabid t;
  110.   Indid i;
  111.   Filid f;
  112. } UnId;
  113. /* user's program calls main procedures by their numbers.
  114.    In interpreter calls of auxiliary procedures are made by
  115.    procedures' address pointing                                */
  116. /***************************************************************
  117.  *       interpretator commands for work with DB - server      *
  118.  ***************************************************************/
  119. struct S_OPSCAN {
  120.   VADR Scan;            /* table scan                            */
  121.   VADR Tid;             /* Tabid,Indid or Filid                  */
  122.   char OperType;        /* operation type of System of Memory    */
  123.                         /* and  Synchronization Managment        */
  124.   char mode;            /* open mode                             */
  125.   i4_t  nr;              /* the number of columns which values    */
  126.                         /* will be selected                      */
  127.   VADR rlist;           /* array of column numbers which values  */
  128.                         /* will be selected                      */
  129.   i4_t  nl;
  130.   VADR list;            /* array of VADR for trees of SP         */
  131.   i4_t  ic;
  132.   VADR range;           /* scan range - restricted form of       */
  133.                         /* conditions for columns included in    */
  134.                         /* idexes; array of VADR                 */
  135.   i4_t  nm;              /* the number of columns which values    */
  136.                         /* will be modified                      */
  137.   VADR mlist;           /* array of column number which values   */
  138.                         /* will be modified                      */
  139.   VADR Exit;            /* exit in the case of                   */
  140.                         /* incompatibility of  SP                */
  141. };
  142. struct S_TMPSCN {
  143.                            /* for creating temporal relation only   */
  144.    /* using by base table scanning          */
  145.      char OperType;        /* method of base table scanning         */
  146.    /* = 't' , 'i' , 'f'                     */   
  147.      VADR TidFrom;         /* TabId of source table                 */
  148.      VADR TidTo;           /* TabId of result table                 */
  149.      i4_t  nr;              /* the number of columns which values    */
  150.                            /* will be selected                      */
  151.      VADR rlist;           /* array of column numbers which values  */
  152.                            /* will be selected                      */
  153.      i4_t  nl;   
  154.      VADR list;            /* array of VADR for trees of SP         */
  155.      i4_t  ic;
  156.      VADR range;           /* scan range - restricted form of       */
  157.                            /* conditions for columns included in    */
  158.                            /* idexes; array of VADR                 */
  159.      VADR Exit;            /* exit in the case of                   */
  160.                            /* incompatibility of  SP                */
  161. };
  162. struct S_TMPCRE {
  163.       VADR  Tid;           /* address for resulting TabId           */
  164.       i4_t   colnum;        /* the number of columns in the table    */
  165.       i4_t   nnulnum;       /* the number of the first columns       */
  166.                            /* which  may not contain                */
  167.                            /* unidentified values                   */
  168.       VADR coldescr;       /* array of column descriptions          */
  169.    /* TREE_ND_TYPE array                    */
  170. } ;
  171. struct S_SORTTBL  {
  172.       VADR TidIn;          /* TabId of source Temporal Relation     */
  173.       VADR TidOut;         /* TabId of result Temporal Relation     */
  174.       i4_t  ns;             /* the number of columns which values are*/
  175.                            /* used in sorting                       */ 
  176.       VADR rlist;          /* array of numbers of columns which     */
  177.                            /* values are used in sorting            */ 
  178.       char fl;             /* CH_ALL-all, CH_UNIC -without          */
  179.                            /* duplicates                            */
  180.       char order;          /* sort order indicator : 'A'            */
  181.                            /* - by increas, 'D' (or any symbol      */
  182.    /* exept 'A', - by decrease.             */
  183.    /* look  CH_INC, CH_DEC                  */
  184. } ;
  185. struct S_MKUNION  {
  186.       VADR TidIn1;         /* TabId of source Sorted Temporal Relation 1 */
  187.       VADR TidIn2;         /* TabId of source Sorted Temporal Relation 2 */
  188.       VADR TidOut;         /* TabId of result Temporal Relation          */
  189.    } ;
  190. struct S_READROW {
  191.   char      flag;         /* this flag='n' till first execution  */
  192.                           /* of 'readrow' after flah='y'. Last   */
  193.                           /* means that in all fields with type  */
  194.                           /* PSECT_PTR and in link 'lst'         */
  195.                           /* addresses  but not offsets are      */
  196.                           /* stored                              */
  197.     PSECT_PTR Scan;       /* table scan for value selection      */
  198.                           /* (for removed table used by dynamic     */
  199.   /* SQL : Scan= -1:off-offset of           */
  200.   /* cursor's name                          */
  201.     i4_t       nr;         /* the number of selection columns        */
  202.     PSECT_PTR ColPtr;     /* addresses of locations of              */
  203.                           /* (PSECT_PTR) results                    */
  204.     PSECT_PTR rlist;      /* array of column number which values    */
  205.                           /* will be selected                       */
  206.    } ;
  207. struct S_FINDROW {
  208.       char      flag;
  209.       PSECT_PTR Scan;     /* table's scan                           */
  210.       i4_t       nr;       /* the number of selected columns         */
  211.       PSECT_PTR ColPtr;   /* addresses of locations of              */
  212.                           /* (PSECT_PTR) results                    */
  213.       PSECT_PTR Exit;     /* exit when the scanning cycle finished*/
  214.    } ;
  215. struct S_INSROW {
  216.       char      flag;
  217.       PSECT_PTR Tid;      /* pointer to table's Tabid             */
  218.       i4_t       nv;       /* the number of inserted columns          */
  219.       PSECT_PTR InsList;  /* array of pointers (PSECT_PTR) to     */
  220.                           /* the roots of trees of insertion      */
  221.       PSECT_PTR ClmTp;    /* array of insertion columns types     */
  222.       PSECT_PTR Constr;   /* pointer to structure S_ConstrHeader  */
  223.    } ;
  224. struct S_INSLIST {
  225.       char      flag;
  226.       PSECT_PTR Tid;          /* pointer to table's Tabid           */
  227.       i4_t       nv;           /* the number of inserted columns        */
  228.       PSECT_PTR len;          /* array of lengths of inserted columns  */
  229.       PSECT_PTR col_types;    /* array of insertion columns types      */
  230.       PSECT_PTR col_ptr;      /* array of address of inserted columns  */
  231.       PSECT_PTR credat_adr;   /* if != NULL : date should be placed */
  232.       /* to this place                      */
  233.       PSECT_PTR cretime_adr;  /* if != NULL : time should be placed */
  234.       /* to this place                      */
  235.    } ;
  236. struct S_INSTAB {
  237.       VADR TidFrom;          /* pointer to source table's Tabid     */
  238.       VADR TidTo;            /* pointer to receiver table's Tabid   */
  239.    } ;
  240. struct S_MODROW    {
  241.       char      flag;
  242.       PSECT_PTR Scan;    /* table's scan(for removed table)     */
  243.                          /* in dynamic SQL : Scan= -1:off-offset*/
  244.                          /* of cursor's string-name             */
  245.       i4_t       nl;      /* the number of columns which values will*/
  246.         /* be modified                         */
  247.       PSECT_PTR mlist;   /* array of nubmbers of modification columns*/
  248.       PSECT_PTR OutList; /* array of pointers (PSECT_PTR) to    */
  249.                          /* tree's roots                        */
  250.       PSECT_PTR ClmTp;   /* array of modification columns types */
  251.       PSECT_PTR Constr;  /* pointer to structure S_ConstrHeader */
  252.    } ;
  253. struct S_DELROW    {
  254.       VADR Scan;         /* table's scan                        */
  255.       VADR Constr;       /* pointer to structure S_ConstrHeader */
  256.    } ;
  257. struct S_CLOSE    {
  258.       VADR Scan;         /* table's scan                        */
  259.    } ;
  260. struct S_DROPTTAB {      /* dropping of temporal relation       */
  261.       VADR Tid;          /* table's Tabid                       */
  262.       };
  263. struct S_DROPBASE {      /* dropping of basic relation or view  */
  264.       i4_t untabid;
  265.       };
  266. struct S_MKGROUP {
  267.       VADR TidIn;      /* Tabid Scan of source temporal relation*/
  268.       VADR TidOut;     /* Tabid of result temporal relation     */
  269.                        /* if functions are there then the last  */
  270.                        /* nf columns correspond flist[]            */
  271.       i4_t  ng;         /* the number of columns belonging to group */
  272.       VADR glist;      /* array of numbers of columns belonging to */
  273.                        /* group                                 */
  274.       char order;      /* indicator of sorting order: 'A'   -   */
  275.        /* - increase, 'D' (or any other symbol  */
  276.        /* exept  'A', - decrease                */
  277.       i4_t  nf;         /* the number of columns for which functions*/
  278.        /* have to be computed                   */
  279.       VADR flist;      /* array of numbers  of columns for which   */
  280.        /* functions have to be computed         */
  281.       VADR fl;         /* char fl[nf-1] - string of flags       */
  282.        /* corresponding for each element from   */
  283.        /*  flist[].                             */
  284.        /* fl[i]==1  COUNT(flist[i])             */
  285.        /* fl[i]==2    AVG(flist[i])             */
  286.        /* fl[i]==3    MAX(flist[i])             */
  287.        /* fl[i]==4    MIN(flist[i])             */
  288.        /* fl[i]==5   SUMM(flist[i])             */
  289.       };
  290. struct S_FUNC          /* computing of aggregate functions      */
  291.   {
  292.   char      flag;
  293.   PSECT_PTR Tid;       /* Tabid of original table               */
  294.   char      OperType;  /* type of SMSM's operation: CH_TAB,CH_INDX */
  295.   i4_t       nl;        /* condition of current string selection */
  296.   PSECT_PTR list;      /* array of VADR for trees of SP         */
  297.   i4_t       ic;
  298.   PSECT_PTR range;     /* scan range - restricted form of       */
  299.        /* condition on columns included in idex    */
  300.        /* array of VADR                         */
  301.   PSECT_PTR colval;    /* PSECT_PTR points to array of PSECT_PTR*/
  302.        /* - array of pointers for functions'    */
  303.        /* values location ; the number of       */
  304.        /* pointers in array has to be equal to  */
  305.        /* value of 'nf'                         */
  306.   i4_t       nf;        /* the number of columns for which functions*/
  307.        /* have to be computed                   */
  308.   PSECT_PTR flist;     /* array of numbers  of columns for which   */
  309.        /* functions have to be computed         */
  310.   PSECT_PTR fl;        /* char fl[nf-1] - string of flags       */
  311.        /* corresponding for each element from   */
  312.        /* flist[].                              */
  313.   PSECT_PTR Exit;      /* exit in the case of                   */
  314.                        /* incompatibility of  SP                */
  315. };
  316. /***************************************************************
  317.  *        commands for management of interpreter work        *
  318.  *           ( withoit connection with DB - server)            *
  319.  ***************************************************************/
  320. struct S_until {
  321.        char      flag;
  322.        PSECT_PTR cond;   /* checked condition - rest            */
  323.        PSECT_PTR ret;    /* begining of cycle repeat            */
  324.    };
  325. struct S_RetPar {
  326.       char      flag;
  327.       char      ExitFlag; /* FALSE if is used in SELECT stmt.   */
  328.       i4_t       OutNum;  /* the number of input parameters      */
  329.       PSECT_PTR OutList; /* array of pointers(PSECT_PTR) to     */
  330.                          /* trees' roots from  SELECT           */
  331.    } ;
  332. struct S_SavePar {
  333.   char      flag;
  334.   i4_t       ParamNum; /* the number of saved parameters */
  335.   PSECT_PTR PlaceOff; /* array of elmements (DataUnion) *
  336.        * where to put the parameters    */
  337.                   } ;
  338. struct S_GoTo {
  339.       char      flag;
  340.       PSECT_PTR Branch;  /* point of branch                     */
  341.    } ;
  342. struct S_SetHandle {
  343.       char      flag;
  344.       MASK      Bit;
  345.       i4_t       TrCnt;  /* the number of trees in which Handle  */
  346.                         /* should be checked accoding to  Bit:  */
  347.                         /* Bit itself if(Bit != 0) else         */
  348.                         /* - input parameter 'HandleSQ'         */
  349.       PSECT_PTR Trees;  /* array of address(PSECT_PTR) of these trees*/
  350.     } ;
  351. struct S_Procedure {
  352.   VADR ProcBeg;    /* address of called procedure */
  353. } ;
  354. struct S_COND_EXIT {
  355.   char      flag;
  356.   PSECT_PTR Tree; /* if the result of calculating of this tree is TRUE => *
  357.            * interpretator finishes work with current procedure   */
  358. } ;
  359. struct S_ERROR {
  360.   i4_t  Err; /* error code.  */
  361. } ;
  362. struct S_CRETAB {
  363.      VADR tabname;         /* string - name of the table         */
  364.      VADR owner;           /* string - authorization             */
  365.      Segid segid;          /*                                    */
  366.      i4_t  colnum;          /* column's number                    */
  367.      i4_t  nncolnum;        /* number of first columns : NOT NULL */
  368.      VADR coldescr;        /* array of column's descriptions     */
  369.      VADR tabid;           /* pointer where to put Tabid         */
  370.    } ;
  371. struct S_CREIND {
  372.      VADR tabid;           /* identifier of table in DB          */
  373.      VADR indid;           /* identifier of index in DB (result) */
  374.      char uniq_fl;         /* ='U' if UNIQUE, 0 else             */
  375.      i4_t  colnum;          /* index column's number              */
  376.      VADR clmlist;         /* list of index columns numbers(i4_t) */
  377.    } ;
  378. struct S_PRIVLG {          /* privileges checking */
  379.   VADR untabid;            /* privilegies on table with this untabid  */
  380.   VADR owner;              /* table's owner name                      */ 
  381.   VADR user;               /* this user name must be equal to current *
  382.     * user name                               */
  383.   VADR privcodes;          /* string of priveleges codes              */
  384.   i4_t  un;                 /* columns number in UPDATE list           */
  385.   VADR ulist;              /* list of columns in UPDATE (i4_t)         */
  386.   i4_t  rn;                 /* columns number in REFERENCES list       */
  387.   VADR rlist;              /* list of columns in REFERENCES  (i4_t)    */
  388. } ;
  389. #endif