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

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  syndef.h - file with constants, data structure definitions
  3.  *  and functions prototypes that are used only by synthesator.
  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: syndef.h,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  29.   
  30. #ifndef __SYNDEF_H__
  31. #define __SYNDEF_H__
  32. #include "type_lib.h"
  33. #include "vmemory.h"
  34. #include <assert.h>
  35.        
  36. typedef struct {
  37.   i4_t    ColNum;    /* number of column for given SP & Table     */
  38.   float  Sel;       /* selectivity of the predicate              */
  39.   TXTREF tree;      /* tree for SP                               */
  40.   char   IndExists; /* flag of index existing for SP's column    */
  41.   char   category;  /* = 1 for SP with EQ and = 2 in other cases */
  42. } SP_Ind_Info;
  43. typedef struct {
  44.   float Sel;        /* the best selectivity of SP for this column      */
  45.   i4_t  num_categ_1; /* number of SP of first category for this column  */
  46.   i4_t  num_categ_2; /* number of SP of second category for this column */
  47. } Col_Stat_Info;
  48. VADR ProcAdr, CurPg, MaxPg; /* pointer to beginning, current & maximum *
  49.        available pointers in the current page  */
  50. VADR *FuncExit;             /* if != NULL => it's the place where to   *
  51.                      * put address of command "END" in section */
  52. #define CAN_BE_USED(PredicMask, AllPredTblMask)              
  53.         (BitOR (AllPredTblMask, PredicMask) == AllPredTblMask)
  54. #define WHAT_IS_BEG_CMD(cmd_adr) (cmd_adr - sizeof(enum CmdCode))
  55. #define PLACE_CMD(adr, cmnd) *V_PTR(adr,struct S_##cmnd)=D_##cmnd
  56. #define SET_CMD(cmnd)       set_command (cmnd, (char *)(&D_##cmnd), sizeof (D_##cmnd))
  57. #define STEP_CMD(adr, cmnd) adr = set_command (cmnd, NULL, SIZES (S_##cmnd))
  58. #define SET_END             set_command (end, NULL, 0)
  59. /* 31 tables have own numners (masks) and others have mask "1"      *
  60.  * For temporary tables it is too "1" (excepting special situations *
  61.  * like GROUP BY (in this case temp. tables has own mask too)       */
  62. i4_t CurBit; /* is used in operators */
  63. #define NEXT_BIT ((CurBit==8*sizeof(i4_t)) ? 1 : 1L<<(CurBit++))
  64. typedef struct
  65. {
  66.   VADR PrAdr, Place;
  67.   MASK Depend;
  68. } SH_Info;
  69. /* During the tree handling addres of current procedure beginning, *
  70.  * position of the tree and it's dependence are stored in the next *
  71.  * element of tr_arr.                                              *
  72.  * During the command SetHandle handling addres of current proce-  *
  73.  * dure beginning, position of the command and bit (that is set by *
  74.  * this command) are stored in the next element of sh_arr.         */
  75. #define SET_ARR_DELTA 10
  76. /* X = 'sh' or 'tr' */
  77. #define SET(X,off,dep)
  78. {
  79.   CHECK_ARR_ELEM (X##_arr, X##_max, X##_cnt, SET_ARR_DELTA, SH_Info); 
  80.   X##_arr[X##_cnt].PrAdr=ProcAdr;
  81.   X##_arr[X##_cnt].Place=off;
  82.   X##_arr[X##_cnt ++].Depend=dep;
  83. }
  84. #define INTERP_MODULE_DELTA 512
  85. /* #define MAX_CMD_SZ (20*SIZES(S_OPSCAN)) */
  86. VADR ProcHandle (TXTREF BegNode, VADR BO_Tid, VCBREF ResScan,
  87.  i2_t ProcN, MASK *Depend, float *sq_cost, i4_t *res_row_num);
  88. VADR ScanHandle (VCBREF ScanNode, VADR * Scan, MASK * Msk,
  89.  float *sq_cost, i4_t *res_row_num);
  90. float Query (TXTREF FromNode, VADR BO_Tid, VCBREF ResScan,
  91.      TXTREF CmdNode, i4_t * res_row_num);
  92. i4_t Handle (TXTREF CurNode, VADR BO_Tid, VCBREF ResScan,
  93.     float *sq_cost, i4_t *res_row_num);
  94. void tree_statistics (TXTREF in, i4_t *scan, i4_t *table, i4_t *tmp);
  95. void prepare_MG (TXTREF ptr, i4_t *g_clm_nmb, VADR * g_clm_arr,
  96.  i4_t *func_nmb, VADR * func_arr, VADR * func_clm_arr);
  97. void prepare_SRT (TXTREF ptr, i4_t *clm_nmb, VADR * clm_arr);
  98. void prepare_UPD (TXTREF ptr, i4_t *clm_nmb, VADR * clm_arr);
  99. VADR prepare_HOLE (sql_type_t typ);
  100. i4_t SP_Extract (TXTREF Node, MASK *TblBits,
  101.                 i4_t TblNum, Simp_Pred_Info ** Result);
  102. void ModDump (FILE * out);
  103. VADR set_command (enum CmdCode code, char *com_adr, i4_t com_size);
  104. void Pr_Procedure (VADR Proc_Adr);
  105. void Pr_SCAN (VADR Tid, VADR Scan, char OperType, char mode, i4_t nr,
  106.       VADR rlist, i4_t nl, VADR list, i4_t ic,
  107.       VADR range, i4_t nm, VADR mlist, VADR Ex, VADR CmdPlace);
  108. void Pr_SORTTBL (VADR TidIn, VADR TidOut, i4_t ns, VADR rlist, char fl,
  109.                  char order);
  110. void Pr_MKUNION (VADR TidIn1, VADR TidIn2, VADR TidOut);
  111. void Pr_FUNC (VADR Tid, char OperType, i4_t nl, VADR list,
  112.       i4_t ic, VADR range, VADR colval, i4_t nf,
  113.       VADR flist, VADR fl, VADR Exit, VCBREF FirClm);
  114. void Pr_GROUP (VADR TidIn, VADR TidOut, i4_t ng, VADR glist,
  115.        char order, i4_t nf, VADR flist, VADR fl);
  116. void Pr_FINDROW (VADR Scan, i4_t nr, VADR ColPtr, VADR Exit, VADR CmdPlace);
  117. void Pr_READROW (VADR Scan, i4_t nr, VADR ColPtr, VADR rlist);
  118. void Pr_UNTIL (VADR PTree, VADR ret, VADR CmdPlace);
  119. void Pr_COND_EXIT (TXTREF Tree);
  120. void Pr_GoTo (VADR Br, VADR CmdPlace);
  121. VADR SelArr (TXTREF SelNode, i4_t *Num);
  122. void Pr_RetPar (VADR OutList, i4_t OutNum, char ExitFlag);
  123. void Pr_INSROW (VADR Tbid, i4_t nv, VADR InsList, VCBREF FirClm,
  124. VCBREF RealScan, i4_t nm, VADR V_mlist, VADR Scan);
  125. void Pr_INSLIST (VADR Tbid, i4_t nv, VADR type_arr, VADR len,
  126.  VADR col_ptr, VADR credate, VADR cretime);
  127. void Pr_INSTAB (VADR TidFrom, VADR TidTo);
  128. void Pr_UPDATE (VADR Scan, i4_t nm, VADR OutList,
  129.                 VCBREF ScanNode, VADR V_mlist);
  130. void Pr_DELETE (VADR Scan, VCBREF ScanNode);
  131. void Pr_CLOSE (VADR Scan);
  132. void Pr_DROP (i4_t untabid);
  133. void Pr_DROPTTAB (VADR Tid);
  134. void Pr_ERROR (i4_t cod);
  135. void Pr_CRETAB (VADR tabname, VADR owner, Segid segid, i4_t colnum,
  136. i4_t nncolnum, VCBREF FirClm, VADR tabid);
  137. void Pr_CREIND (VADR tabid, VADR indid, char uniq_fl, 
  138. i4_t colnum, VADR clmlist);
  139. void Pr_SavePar (VCBREF Dict);
  140. void Pr_TMPCRE (VADR Tid, VCBREF FirClm, i4_t nnulnum);
  141. void Pr_PRIVLG (VADR untabid, VADR owner, VADR user, VADR privcodes, 
  142. i4_t un, VADR ulist, i4_t rn, VADR rlist);
  143. VADR Pr_Constraints (VCBREF ScanNode, VADR Scan,
  144.                      i2_t oper, i4_t nm, i4_t *mlist);
  145. VADR Tr_RecLoad (TXTREF Nod, MASK * Depend, i4_t RhNeed, float *sq_cost);
  146. float opt_query (TXTREF FromNode, i4_t *res_row_num);
  147. #endif