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

SQL Server

开发平台:

Unix_Linux

  1. /* 
  2.  *  inprtyp.h - file with definitions for interpretator only
  3.  *              (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: inprtyp.h,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  29. #ifndef __intprtyp_h__
  30. #define __intprtyp_h__
  31. #include "type_lib.h"
  32. #define OPERN       1
  33. #define LEAF        2
  34. #define DONE        3
  35. #define P_ALLOC(n,typ) V_PTR(VMALLOC(n,typ),char)
  36. #define Tid_V_ADR(ptr,x) (&(V_ADR(ptr,x,UnId)->t))
  37. #define Iid_V_ADR(ptr,x) (&(V_ADR(ptr,x,UnId)->i))
  38. #define Fid_V_ADR(ptr,x) (&(V_ADR(ptr,x,UnId)->f))
  39. #define Tid_ADR(ptr) (&(((UnId *)(ptr->Tid.adr))->t))
  40. #define Iid_ADR(ptr) (&(((UnId *)(ptr->Tid.adr))->i))
  41. #define Fid_ADR(ptr) (&(((UnId *)(ptr->Tid.adr))->f))
  42. #define SCN(ptr)   (*((Scanid *)(ptr->Scan.adr)))
  43. #define V_SCN(ptr) (*V_ADR(ptr,Scan,Scanid))
  44. #define PTR(s,p,n,ty) ((ty *)( ( ((PSECT_PTR *)((s->p).adr))[n] ).adr ))
  45. #define TYP(s,p,n) (PTR(s,p,n,TRNode)->Ty)
  46. #define LEN_I(from,pointer)  ( ((sql_type_t *)(from->pointer.adr))[i].len)
  47. #define TYP_I(from,pointer)  ( ((sql_type_t *)(from->pointer.adr))[i].code )
  48. /* in two next definitions x- pointerc to tree */
  49. #define LEN_STR(x) ((x)->Ty.len)
  50. #define VAL_TYPE(x) ((x)->Ty.code)
  51. typedef struct
  52. {
  53.   TRNode *TP;
  54.   i4_t flg;    /* =1, if the first operand of TP->code  *
  55.        * operation is already handled. Else =0 */
  56.   i4_t art;
  57. } StackUnit;
  58. typedef struct
  59. {
  60.   DataUnit Left, Right;
  61.   sql_type_t Type;
  62.   char LeftCode, RightCode, NullCode;
  63. } SP_Cond;
  64. #define RhExist(x) (x->Rh.off != VNULL)
  65. #define NextRh(x) ((TRNode *)ADR(x,Rh))
  66. #define NextDn(x) ((TRNode *)ADR(x,Dn))
  67. #define Leaf(x)   (x->Dn.off == VNULL)
  68. #define CONDBUF(bufsz,bufpt,cmd,num,field)                                 
  69.                   CondBuf(bufsz,bufpt,cmd,num,                             
  70.   (VADR *)(cmd->field.adr),cmd->Exit.adr)
  71. #define V_CONDBUF(bufsz,bufpt,cmd,num,field)                               
  72.                   CondBuf(bufsz,bufpt,cmd,num,                             
  73.   V_ADR(cmd,field,VADR),V_ADR(cmd,Exit,char))
  74. #define CondBuf(bufsz,bufpt,cmd,num,list,ex) {                             
  75.                               bufsz=0; bufpt=NULL;                         
  76.                               if (cmd->num)                                
  77.                                 {                                          
  78.           bufsz=condbuf(&bufpt,cmd->num,list);     
  79.           if ( bufsz<0 )                           
  80.     CHECK_ERR(bufsz);                      
  81.  /* checking of the compatibility of columns' conditions */
  82.           if (!bufsz)                              
  83.  /* columns' conditions aren't compatible */               
  84.     {                                      
  85.       CHECK_ERR(-EOSCAN);                  
  86.       cur=ex;                              
  87.               break;                               
  88.             }                                      
  89.                 }  }
  90. #define MAX_STACK 64
  91. #define InitDat     if (data_st == NULL) {                         
  92.                       data_st=xmalloc(MAX_STACK*SZ_DU);            
  93.                       dt_max=MAX_STACK;                            
  94.                       dt_ind=-1; }
  95. #define InitStack   if (stack == NULL) {                           
  96.                       stack=xmalloc(MAX_STACK*SZ_SU);              
  97.                       st_max=MAX_STACK;                            
  98.                     st_ind=-1; }
  99. #define DtPush    { if (dt_ind==dt_max) {                               
  100.                       dt_max+=MAX_STACK;                                
  101.                       data_st=(DataUnit *)xrealloc(data_st,dt_max*SZ_DU);
  102.                     }                                                   
  103.                     dt_ind++; }
  104. #define DtPop       dt_ind--;
  105. #define StPush    { if (st_ind==st_max) {                            
  106.                       st_max+=MAX_STACK;                             
  107.                       stack=(StackUnit *)xrealloc(stack,st_max*SZ_SU);
  108.                     }                                                
  109.                     st_ind++; }
  110. #define StPop       st_ind--;
  111. #define CloseDat    if (data_st!=NULL)  xfree(data_st);
  112. #define CloseStack  if (stack!=NULL) xfree(stack);
  113. #define DtCurEl       (data_st[dt_ind])
  114. #define DatCur        (DtCurEl.dat)
  115. #define StrCur        (STR_PTR  (&DatCur))
  116. #define VStrCur       (STR_VPTR (&DatCur))
  117. #define SrtCur        (SRT_VL   (&DatCur))
  118. #define IntCur        (INT_VL   (&DatCur))
  119. #define LngCur        (LNG_VL   (&DatCur))
  120. #define FltCur        (FLT_VL   (&DatCur))
  121. #define DblCur        (DBL_VL   (&DatCur))
  122. #define NlFlCur       (DatCur.nl_fl)
  123. #define TypCur        (DtCurEl.type)
  124. #define LenCur        (TypCur.len)
  125. #define CodCur        (TypCur.code)
  126. #define DtPredEl      (data_st[dt_ind-1])
  127. #define DatPred       (DtPredEl.dat)
  128. #define StrPred       (STR_PTR (&DatPred))
  129. #define SrtPred       (SRT_VL (&DatPred))
  130. #define IntPred       (INT_VL (&DatPred))
  131. #define LngPred       (LNG_VL (&DatPred))
  132. #define FltPred       (FLT_VL (&DatPred))
  133. #define DblPred       (DBL_VL (&DatPred))
  134. #define NlFlPred      (DatPred.nl_fl)
  135. #define LenPred       (DtPredEl.type.len)
  136. #define CodPred       (DtPredEl.type.code)
  137. #define StcCur        (stack[st_ind])
  138. #define CurPred       { cur=stack[st_ind].TP;    
  139.                         StPop;                   
  140.                         Handle=cur->Handle; }
  141. #define PtrDtNextEl   (data_st+dt_ind+1)
  142. #define DtNextEl      (data_st[dt_ind+1])
  143. #define DatNext       (DtNextEl.dat)
  144. #define LngNext       (LNG_VL   (&DatNext))
  145. /* function from interpr.c : */
  146. i4_t proc_work  __P((char *begin, char **Exi, MASK Handle));
  147. /* following functions are in intlib.c : */
  148. i4_t handle_statistic  __P((i4_t untabid, i4_t tab_col_num, i4_t mod_col_num,
  149.                       i4_t *mod_col_list, i4_t use_values));
  150. i4_t change_statistic  __P((void));
  151. i4_t check_and_put  __P((i4_t mod_col_num, i4_t *mod_col_list, TRNode **tree_ptr_arr,
  152.    DataUnit **res_data_arr, S_ConstrHeader *header));
  153. i4_t chck_err  __P((i4_t cd));
  154. void off_adr  __P((PSECT_PTR * arr_ptr, i4_t nr));
  155. i4_t prep_inl  __P((i4_t prep_cnt, i4_t *prep_need, i2_t *len, void **col_ptr));
  156. i4_t calculate  __P((TRNode * tr, void *res_ptr, i4_t res_size,
  157.        byte res_type, char *null_fl));
  158. void put_as  __P((char ch, char *ch_ptr, i4_t how));
  159. i4_t condbuf  __P((char **bufptr, i4_t ClmCnt, VADR * Trees));
  160. #endif