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

SQL Server

开发平台:

Unix_Linux

  1. /* 
  2.  *  pr_glob.h - file with some constants, data types definitions
  3.  *              and functions prototypes  used by all components
  4.  *              of GNU SQL compiler
  5.  *                
  6.  *  This file is a part of GNU SQL Server
  7.  *
  8.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  9.  *  Developed at the Institute of System Programming
  10.  *  This file is written by Konstantin Dyshlevoj 
  11.  * 
  12.  *  This program is free software; you can redistribute it and/or modify
  13.  *  it under the terms of the GNU General Public License as published by
  14.  *  the Free Software Foundation; either version 2 of the License, or
  15.  *  (at your option) any later version.
  16.  *
  17.  *  This program is distributed in the hope that it will be useful,
  18.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  *  GNU General Public License for more details.
  21.  *
  22.  *  You should have received a copy of the GNU General Public License
  23.  *  along with this program; if not, write to the Free Software
  24.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  25.  *
  26.  *  Contacts: gss@ispras.ru
  27.  *
  28.  */
  29. /* $Id: pr_glob.h,v 1.246 1997/04/24 17:41:43 kml Exp $ */
  30. #ifndef __PR_GLOB_H__
  31. #define __PR_GLOB_H__
  32. #include "setup_os.h"
  33. #if TIME_WITH_SYS_TIME
  34. # include <sys/time.h>
  35. # include <time.h>
  36. #else
  37. # if HAVE_SYS_TIME_H
  38. #  include <sys/time.h>
  39. # else
  40. #  include <time.h>
  41. # endif
  42. #endif
  43. #include "sql.h"
  44. #include "type.h"
  45. #include "typecpi.h" 
  46. #include "typepi.h" 
  47. #ifdef __INTERPR__
  48.   #include "typepi.h"
  49.   #include "typeif.h" 
  50. #endif
  51. #define TY_EST      long
  52. typedef i4_t        TYPE_VARI;
  53. typedef char        TYPE_VW;
  54. extern i4_t         PRCD_DEBUG;
  55. typedef struct {
  56.   void *SHPls;
  57.   i2_t  TbNum;
  58.   i4_t  Cnt;
  59.   i4_t *Trees;
  60. } SetPls;
  61. #define UNKNOWN_VALUE 0
  62. #define REGULAR_VALUE 1
  63. #define NULL_VALUE    2
  64. #define NOT_CONVERTED 3
  65. /* determination of code of value                 *
  66.  * (UNKNOWN_VALUE, REGULAR_VALUE or NULL_VALUE) : */
  67. #define TRN_FINISH    exit(0)
  68. #define IE    (1L<<4)    /*     there is some index           */
  69. #define IC    (1L<<5)    /*                   clustered index */
  70. #define IU    (1L<<6)    /*                   unique index    */
  71. #define IJ    (1L<<7)    /*                   composite index */
  72. #define GET_MEMC(name,n)   (name *)xmalloc(sizeof(name)*n);
  73. #define SIZES(x)           sizeof(struct x)
  74. #define CH_ASC     'A'
  75. #define CH_DES     'D'
  76. #define FN_COUNT    1
  77. #define FN_AVG      2
  78. #define FN_MAX      3
  79. #define FN_MIN      4
  80. #define FN_SUMM     5
  81. #define FN_DT_COUNT 6
  82. #define FN_DT_AVG   7
  83. #define FN_DT_SUMM 10
  84. #define BitOR(x,y)  ((x)|(y))
  85. #define BitAND(x,y) ((x)&(y))
  86. #define BitNOT(x)   (~(x))
  87. #define SZ_SU   sizeof(StackUnit)
  88. #define SZ_DU   sizeof(DataUnit)
  89. #define MK_UN_OPER(op, arg)         
  90. {                                   
  91.   DtPush; DtCurEl = (arg);          
  92.   error = oper (op, 1);             
  93.   DtPop;                            
  94.   if (error < 0)                    
  95.     return error;                   
  96. }
  97. #define MK_BIN_OPER(op, arg1, arg2) 
  98. {                                   
  99.   DtPush; DtCurEl = (arg1);         
  100.   DtPush; DtCurEl = (arg2);         
  101.   error = oper (op, 2);             
  102.   DtPop;                            
  103.   if (error < 0)                    
  104.     return error;                   
  105. }
  106. #define COMP_RESULT LngNext
  107. #define OPER_RESULT DtNextEl
  108. /* curdate - put current date to string *
  109.  * (8 simbols & ) as "03:10:72"   :   *
  110.  * day, month, year                     */
  111. #define curdate(to)  { time_t _tt=time(NULL);       
  112.                        CFTIME(to, 9,"%d.%m.%y", &_tt); }
  113. /* curtime - put current time to string *
  114.  * (8 simbols & ) as "07:45:00"   :   *
  115.  * hours, minutes, seconds              */
  116. #define curtime(to)  { time_t _tt=time(NULL);  
  117.                        CFTIME(to, 9, "%H:%M:%S", &_tt); }
  118. struct S_IndInfo
  119. {
  120.   struct S_IndInfo *Next;
  121.   Indid             Ind;
  122.   MASK              Mask;
  123.   i4_t               Cnt;     /* index columns number             */
  124.   i2_t            *Clm;     /* array of columns numbers (in DB) */
  125. };
  126. typedef struct {
  127.   MASK    Depend;    /* mask: what tables are considered in SP                */
  128.   i4_t     SP_Num;    /* number of interpretations as simple predicate         */
  129.   TXTREF  SP_Trees;  /* pointer to first interpretation                       *
  130.       * all interpretations are linked through RIGHT pointer  */
  131.   MASK    SQ_deps;   /* dependency of subquery from predicate (=0 if SQ doesn't exist) */
  132.   float   SQ_cost;   /* estimation of the cost for subquery (=0.0 if SQ doesn't exist) */
  133.   char    flag;      /* flag = 1 if one of interpretations was used in OPSCAN */
  134. } Simp_Pred_Info;
  135. VADR codegen __P((void));
  136. struct Id{
  137.   i2_t Num,Off;
  138. };
  139. /* structures for work with constraints realisation : */
  140. struct S_Constr_Info {
  141.   i2_t constr_type; /* FOREIGN, REFERENCE, CHECK */
  142.   char *mod_cols;    /* using flags for columns of the table in this constraint */
  143.   VADR  constr;      /* pointer to structure S_Constraint for this constraint   */
  144.   i4_t   conid;       /* identifier of CHECK constraint                          */
  145.   i4_t   consize;     /* size in bytes of CHECK constraint                       */
  146.   struct S_Constr_Info *next;
  147. };
  148. typedef struct S_Constr_Info Constr_Info;
  149.   
  150. typedef struct {
  151.   i2_t constr_type;  /* FOREIGN, REFERENCE, CHECK    */
  152.   VADR  object;       /* Tabid, Indid, tree           */
  153.   i4_t   colnum;       /* columns number in constraint */
  154.   VADR  col_arg_list; /* i4_t-array of columns numbers */
  155.   VADR  col_ref_list; /* i4_t-array of columns numbers */
  156. } S_Constraint;
  157. typedef struct {
  158.   VADR scan;        /* changing table's scan                */
  159.   i4_t  constr_num;  /* number of elements in the next array */
  160.   VADR constr_arr;  /* pointer to array of pointers         *
  161.      * (VADR) to structures S_Constraint    */
  162.   i4_t  untabid;     /* untabid of changing table            */
  163.   i4_t  tab_col_num; /* column number in the table           */
  164.   i4_t  old_vl_cnt;  /* length of the next 2 arrays          */
  165.   VADR old_vl_types;/* pointer to array of types (TYPE)     *
  166.      * of reading columns                   */
  167.   VADR old_vl_nums; /* pointer to array of columns          *
  168.      * numbers to be read from scan         */
  169. } S_ConstrHeader;
  170. /* structures with statistic information about table & its columns : */
  171. typedef struct {
  172.   DataUnit min, max; /* min & max values in column */
  173. } col_stat_info;
  174. typedef struct {
  175.   DataUnit ins_min, ins_max; /* min & max inserted values in   column */
  176.   DataUnit del_min, del_max; /* min & max deleted  values from column */
  177. } col_change_info;
  178. struct S_tab_stat_info {
  179.   i4_t untabid;
  180.   i2_t nrows_change, ncols;
  181.   struct S_tab_stat_info *next;
  182.   col_change_info *col_info;
  183. };
  184. typedef struct S_tab_stat_info tab_stat_info;
  185. #ifdef __PRCD__
  186. #include "typepf.h" 
  187. #endif
  188. #endif