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

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  gsqltrn.x  -  GNU SQL transaction client/server protocol interface
  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 Dyshlevoi Konstantin
  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.  *  Contact: gss@ispras.ru
  25.  *
  26.  */
  27. /* $Id: gsqltrn.x,v 1.246 1997/03/31 11:03:29 kml Exp $ */
  28. #ifdef RPC_SVC
  29. %#define main  run_server
  30. %#define RPC_SVC_FG
  31. #endif
  32. typedef string    string_t<>;
  33. typedef string_t  init_params_t<>;
  34. struct stmt_info_t
  35.   string_t            stmt;
  36.   string_t            stmt_name;
  37.   int                 bline;
  38.   struct stmt_info_t *next;
  39. };
  40. struct prep_elem_t { /*--------------------------------------------------*/
  41.   int      type    ; /* parameter type (codes defined  in sql_type.def)  */
  42.   int      length  ; /*                                                  */
  43.   int      scale   ; /* need for cobol type of parameters like dec(7,3)  */
  44.   string_t name    ; /* parameter name                                   */
  45.   string_t ind_name; /* name of parameter indicator                      */
  46.   int      nullable; /*  1 - if parameter can be undefined               */
  47.                      /* -1 - if returned parameter (in  interface list)  */
  48. };/*---------------------------------------------------------------------*/
  49. typedef struct prep_elem_t descr_t<>;
  50. struct compiled_object_t { /*--------------------------------------------*/
  51.   struct compiled_object_t    /*                                         */
  52.              *next;           /*                                         */
  53.   descr_t     descr_in;       /* input parameters description            */
  54.   descr_t     descr_out;      /* output parameters descriptions          */
  55.   int         object;         /* id(number) of the object in module      */
  56.   string_t    cursor_name;    /* used for UPDATE or DELETE positioned    */
  57.   string_t    table_name;     /* this & next fields identify the table   */
  58.   string_t    table_owner;    /* if prepared statement - updatable query */
  59. };/*---------------------------------------------------------------------*/
  60. struct call_subst_t  {    /*---------------------------------------------*/
  61.   string_t    proc_name;      /* procedure name (for module compilation) */
  62.   descr_t     interface;      /* procedure parameters list               */
  63.   descr_t     in_sql_parm;    /* actual parameters list (input)          */
  64.   descr_t     out_sql_parm;   /* actual parameters list (output)         */
  65.   int         object;         /* called object id in module              */
  66.   int         method;         /* id of invoked object method             */
  67.   string_t    jmp_on_error;   /* label to jump on error in embedded sql  */
  68.   string_t    jmp_on_eofscan; /* label to jump at the end of scan        */
  69. };/*---------------------------------------------------------------------*/
  70. struct call_t  {   /*----------------------------------------------------*/
  71.   struct call_t       *next;  /* next call replacement                   */
  72.   struct call_subst_t *subst; /* substitution infos - if it need         */
  73. };/*---------------------------------------------------------------------*/
  74. struct file_buf_t  /*----------- transfer file buffers:  ----------------*/
  75. {                             /*        tree dumps,error stream, etc     */
  76.   string_t           ext;     /*   extension of file.                    */
  77.   string_t           text;    /*   buffer                                */
  78.   struct file_buf_t *next;    /*   next file buffer (if exist)           */
  79. };/*---------------------------------------------------------------------*/
  80. const COMP_STATIC         = 1;
  81. const COMP_DYNAMIC_CURSOR = 2;
  82. const COMP_DYNAMIC_SIMPLE = 3;
  83. union comp_data_t switch(int comp_type)
  84. {
  85. case  COMP_STATIC         : string_t module;
  86. case  COMP_DYNAMIC_CURSOR : int     seg_ptr;
  87. case  COMP_DYNAMIC_SIMPLE : int     segm;
  88. default : void; /* comp_type always inited to 0 */
  89. };
  90. struct compiled_t { /*---------------------------------------------------*/
  91.   int                errors;  /* errors encountered in compiled module   */
  92.   file_buf_t        *bufs;    /* buffers of tree dumps,error stream, etc */
  93.   compiled_object_t *objects; /* compiled object infos                   */
  94.   call_t            *calls;   /* SQL substitution data                   */
  95.   comp_data_t        stored;  /* reference to resulted module            */ 
  96. };/*---------------------------------------------------------------------*/
  97. struct link_cursor_t /*-- dynamically create cursor on query ------------*/
  98. {                      /*                                  given by name */
  99.   string_t cursor_name;/* created cursor name                            */
  100.   string_t stmt_name;  /* name of compiled statement                     */
  101.   int     segment;    /* pointer to packed raw segment image            */
  102. };/*---------------------------------------------------------------------*/
  103. struct seg_del_t { /*---- delete segment instruction --------------------*/
  104.   int     segment;    /* pointer to packed raw segment image            */
  105.   int     seg_vadr<>; /* list of VADR's of copies of the segment linked */
  106.                        /*  to system. This can happen if module is       */
  107.                        /*  cursor query declaration and several cursors  */
  108.                        /*  was opened on the query                       */
  109. };/*---------------------------------------------------------------------*/
  110. #ifdef RPC_XDR
  111. %#include "sql_type.h"
  112. #endif
  113. union data switch(int type)
  114. {
  115. case SQLType_Char    : opaque   Str<>;
  116. case SQLType_Short   : short    Shrt ;
  117. case SQLType_Int     : int      Int  ;
  118. case SQLType_Long    : int      Lng  ;
  119. case SQLType_Real    : float    Flt  ;
  120. case SQLType_Double  : double   Dbl  ;
  121. default              : void;
  122. };
  123. struct parm_t
  124. {
  125.   data value;
  126.   int  indicator;
  127. };
  128. typedef parm_t   parm_row_t<>;
  129. const RET_COMP = 1;
  130. const RET_ROW  = 2;
  131. const RET_TBL  = 3;
  132. const RET_SEG  = 4;
  133. const RET_VOID = 0;
  134. union return_data switch(int rett)
  135. {
  136. case  RET_COMP: compiled_t comp_ret;
  137. case  RET_ROW : parm_row_t row;
  138. case  RET_TBL : parm_row_t tbl<>;
  139. case  RET_SEG : int       segid;
  140. default : void;
  141. };
  142. struct result_t
  143. {
  144.   int          sqlcode;
  145.   return_data  info;
  146. };
  147. struct insn_t { /*-------------------------------------------*/
  148.   int           vadr_segm;   /* compiled module identifier  */ 
  149.   int            sectnum;     /* object in module identifier */ 
  150.   int            command;     /* method of object to call    */
  151.   int            options;     /* repetitions & so on         */
  152.   parm_row_t     parms;       /* parms list                  */ 
  153.   struct insn_t *next;        /* next instruction            */ 
  154. };/*---------------------------------------------------------*/
  155.     
  156. program GSQL_TRN {
  157.   version BETA0 {
  158.     result_t    INIT_COMP(init_params_t)       = 1;
  159.     result_t    COMPILE(stmt_info_t)           = 2;
  160.     
  161.     result_t    DEL_SEGMENT(seg_del_t)         = 3;
  162.     result_t    LINK_CURSOR(link_cursor_t)     = 4;
  163.     
  164.     result_t    LOAD_MODULE(string_t)          = 5;
  165.     result_t    EXECUTE_STMT(insn_t)           = 6;
  166.     
  167.     result_t    DB_CREATE(void)                = 7;
  168.     
  169.     result_t    RETRY(void)                    = 8;    /* repeat last answer */
  170.     int         IS_RPC_READY(void)             = 1000; /* just return 1      */
  171.   } = 1 ;
  172. } = 0x40000010;
  173. #ifdef RPC_HDR
  174. %extern result_t gsqltrn_rc;
  175. #endif
  176. #ifdef RPC_SVC
  177. %#undef GSQL_TRN
  178. %#define GSQL_TRN  rpc_program_id
  179. %extern long  rpc_program_id;
  180. #endif