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

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  sql_type.h - Sql types support for GNU SQL compiler
  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 Michael Kimelman
  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: type_lib.h,v 1.246 1997/03/31 11:04:04 kml Exp $ */
  28.                 
  29. #ifndef __TYPE_LIB_H__
  30. #define __TYPE_LIB_H__
  31. #include "vmemory.h"
  32. #include "sql_type.h"
  33. #include "trl.h"
  34. #include "gsqltrn.h"
  35. #include "sql.h"
  36. #define T_STR    SQLType_Char /* C-like string : length without  */
  37. #define T_SRT    SQLType_Short
  38. #define T_INT    SQLType_Int
  39. #define T_LNG    SQLType_Long
  40. #define T_FLT    SQLType_Real
  41. #define T_DBL    SQLType_Double
  42. #define SZ_SHT   sizeof(i2_t)
  43. #define SZ_INT   sizeof(i4_t)
  44. #define SZ_LNG   sizeof(i4_t)
  45. #define SZ_FLT   sizeof(float)
  46. #define SZ_DBL   sizeof(double)
  47. #define SZ_PTR   sizeof(char*)
  48. #define T_BOOL   T_INT
  49. typedef union {
  50.   VADR  off;
  51.   char *adr;
  52. } PSECT_PTR;
  53. typedef u4_t MASK;
  54. /* let constants and columns have the same types */
  55. typedef struct  Node{
  56.    i4_t code;
  57.    MASK  Mask;            /*                                       */
  58.    MASK  Depend;          /* mask of dependence of subtree on table*/
  59.    MASK  Handle;          /* mask of changes of current table's    */
  60.                           /* strings                               */
  61.    i4_t  Arity;           /* the number of operands                */
  62.    PSECT_PTR Rh;          /* reference to the next operand         */
  63.    PSECT_PTR Dn;          /* reference to the first operand        */
  64.    sql_type_t Ty;               /* value type (if list) or subtree type  */
  65.                           /* (if operattion's node)                */
  66.    PSECT_PTR Ptr;         /* reference to DataUnit for data; it also*/
  67.                           /* is used as reference for result of    */
  68.                           /* subtree computing if it isn't list    */
  69. } TRNode;
  70. typedef struct TypeSet
  71. {
  72.   union
  73.   {
  74.     PSECT_PTR StrPtr;
  75.     i2_t     Srt;
  76.     i4_t       Iint;
  77.     i4_t      Lng;
  78.     float     Flt;
  79.     double    Dbl;
  80.   } val;
  81.   i2_t max_len;
  82.   char  nl_fl;
  83. } TpSet;
  84. typedef struct
  85. {
  86.   TpSet       dat;
  87.   sql_type_t  type;
  88. } DataUnit;
  89. void  conv_type __P((char *s,sql_type_t *l,i4_t direct));/* direct -- the direction */
  90.                                                   /* of type transformation  */
  91.                                                   /* 1 == s->l ; 0 = l->s    */
  92. char *type2str __P((sql_type_t t));
  93. sql_type_t read_type __P((char *s));
  94. /* definitions for working with types in interpretator */
  95. #define BUF_SIZE_VL(DU_vl, type_to) (sizeof(i2_t) + 
  96.                                      (((DU_vl).type.code == T_STR) ? 
  97.                                       (DU_vl).type.len : sizeof_sqltype (type_to)))
  98. #define DU_PTR_VL(DU_vl) (((DU_vl).type.code == T_STR) ?  
  99.   STR_PTR (&((DU_vl).dat)) : 
  100.                           (char *) (&VL (&((DU_vl).dat))))
  101.      
  102. VADR  load_tree  __P((TRNode *node, VADR cur_seg, VADR str_seg));
  103. int   res_row_save  __P((char *nl_arr, i4_t nr, DataUnit **colval));
  104. i2_t  sizeof_sqltype   __P((sql_type_t type));
  105. int   DU_to_buf  __P((DataUnit *dt_from, char **pointbuf, sql_type_t *to_type));
  106. int   DU_to_rpc  __P((DataUnit *dt_from, parm_t *to, i4_t typ));
  107. void  conv_DU_to_str  __P((DataUnit *from, DataUnit *to));
  108. int   mem_to_DU  __P((char nl_fl, byte typ_from_code,
  109.                  i2_t from_len, void *from, DataUnit *to));
  110. int   PutDataNext  __P((TRNode * cur));
  111. int   oper  __P((byte code, i4_t arity));
  112. float sel_const  __P((i4_t op, DataUnit *cnst, DataUnit *min, DataUnit *max));
  113. void  type_to_bd  __P((sql_type_t *tp_from, sql_type_t *tp_to));
  114. void  prepare_CONST  __P((TXTREF ptr, VADR V_PTN));
  115. void  prepare_USERNAME  __P((TRNode *PTN));
  116. int   rpc_to_DU  __P((parm_t *from, DataUnit *to));
  117. i4_t  user_to_rpc  __P((gsql_parm *parm, parm_t *rpc_arg));
  118. i4_t  rpc_to_user  __P((parm_t *rpc_res, gsql_parm *parm));
  119. i4_t  put_dat  __P((void *from, i4_t from_size, byte from_mask, char from_nl_fl,
  120.       void *to,   i4_t to_size_ , byte to_mask_ , char *to_nl_fl ));
  121. #endif