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

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  gsqltrn.c  -  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 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.  *  Contact: gss@ispras.ru
  25.  *
  26.  */
  27. #ifndef __GSQLTRN_C__
  28. #define __GSQLTRN_C__
  29. /* $Id: gsqltrn_lib.c,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  30. #include "setup_os.h"
  31. #include "gsqltrn.h"
  32. #include "global.h"
  33. #include "svr_lib.h"
  34. #if HAVE_UNISTD_H
  35. # include <unistd.h>
  36. #endif
  37. i4_t run_server(void);
  38. result_t gsqltrn_rc;
  39. static i4_t bd_catalog_read = 0;
  40. #if 0
  41. program GSQL_TRN {
  42.   version BETA0 {
  43.     result_t    INIT_COMP(init_params_t)       = 1;
  44.     result_t    COMPILE(stmt_info_t)           = 2;
  45.     
  46.     result_t    DEL_SEGMENT(seg_del_t)         = 3;
  47.     result_t    LINK_CURSOR(link_cursor_t)     = 4;
  48.     
  49.     result_t    LOAD_MODULE(string_t)          = 5;
  50.     result_t    EXECUTE_STMT(insn_t)           = 6;
  51.     
  52.     result_t    DB_CREATE(void)                = 7;
  53.     
  54.     result_t    RETRY(void)                    = 8;    /* repeat last answer */
  55.     i4_t         IS_RPC_READY(void)             = 1000; /* return process id  */
  56.   } = 1 ;
  57. } = 0x40000010;
  58. #endif
  59. /*--------- shortcuts definition settings -----------------------------------*/
  60. #if defined(SERVE_ALL)
  61. #define init_comp_SUBST    1
  62. #define compile_SUBST      1
  63. #define del_segment_SUBST  1
  64. #define link_cursor_SUBST  1
  65. #define load_module_SUBST  1
  66. #define execute_stmt_SUBST 1
  67. #define db_create_SUBST    1
  68. #endif
  69. #if defined(SERVE_COMPILE)
  70. #define init_comp_SUBST    1
  71. #define compile_SUBST      1
  72. #define del_segment_SUBST  1
  73. #define link_cursor_SUBST  1
  74. #endif
  75. #if defined(SERVE_EXECUTE)
  76. #define load_module_SUBST  1
  77. #define execute_stmt_SUBST 1
  78. #endif
  79. #if defined(SERVE_BOOT)
  80. #define db_create_SUBST    1
  81. #endif
  82. #if defined(db_create_SUBST)
  83. #define CAN_BOOT
  84. #endif
  85. /*------------------------------------------------------------------------*/
  86. static void
  87. clr_return(void)
  88. {
  89.   XDR x;
  90.   x.x_op=XDR_FREE;
  91.   xdr_result_t(&x,&gsqltrn_rc);
  92.   bzero(&gsqltrn_rc,sizeof(gsqltrn_rc));
  93.   gsqltrn_rc.sqlcode = -MDLINIT;
  94. }
  95. #define UNSUPPORTED -DS_SYNTER /* just some case of fatal error */
  96. #define RPC_STUB(vers,ot,it,proc)      
  97. RPC_SVC_PROTO(ot,it,proc,vers){         
  98.   ot *rv = &gsqltrn_rc;   
  99.   start_processing();
  100.   clr_return();
  101.   /*fprintf(stderr," start '%s' n",#proc);*/   
  102.   if(!bd_catalog_read && strcmp(#proc,"db_create")) 
  103.     return rv;                                  
  104.   TRY {
  105.     if(&gsqltrn_rc != proc##_SUBST(in,rqstp))   
  106.       EXCEPTION(UNSUPPORTED);
  107.     if(!bd_catalog_read && strcmp(#proc,"db_create")) 
  108.       bd_catalog_read = 1;                      
  109.   }
  110.   CATCH {
  111.   case UNSUPPORTED:
  112.   case FATAL_EXIT_CODE:
  113.      gsqltrn_rc.sqlcode = -DS_SYNTER;   
  114.     break;
  115.   case -MDLINIT:
  116.     break;
  117.   }
  118.   END_TRY;
  119.   
  120.   /*fprintf(stderr," end of '%s' n",#proc);*/  
  121.   finish_processing();
  122.   return rv;
  123. }
  124. #if !defined(init_comp_SUBST)
  125. #define init_comp_SUBST(i,r) NULL
  126. #elif init_comp_SUBST == 1
  127. #undef init_comp_SUBST
  128. #define init_comp_SUBST(i,r) init_compiler(i,r)
  129. #endif
  130. RPC_STUB( 1, result_t,  init_params_t,init_comp);
  131. #if !defined(compile_SUBST)
  132. #define compile_SUBST(i,r) NULL
  133. #elif compile_SUBST == 1
  134. #undef compile_SUBST
  135. #define compile_SUBST(i,r) compile(i,r)
  136. #endif
  137. RPC_STUB( 1, result_t,  stmt_info_t,compile);
  138. #if !defined(del_segment_SUBST)
  139. #define del_segment_SUBST(i,r) NULL
  140. #elif del_segment_SUBST == 1
  141. #undef del_segment_SUBST
  142. #define del_segment_SUBST(i,r) del_segment(i,r)
  143. #endif
  144. RPC_STUB( 1, result_t,  seg_del_t,del_segment);
  145. #if !defined(link_cursor_SUBST)
  146. #define link_cursor_SUBST(i,r) NULL
  147. #elif link_cursor_SUBST == 1
  148. #undef link_cursor_SUBST
  149. #define link_cursor_SUBST(i,r) link_cursor(i,r)
  150. #endif
  151. RPC_STUB( 1, result_t,  link_cursor_t,link_cursor);
  152. #if !defined(load_module_SUBST)
  153. #define load_module_SUBST(i,r) NULL
  154. #elif load_module_SUBST == 1
  155. #undef load_module_SUBST
  156. #define load_module_SUBST(i,r) module_init(i,r)
  157. #endif
  158. RPC_STUB( 1, result_t,  string_t,load_module);
  159. #if !defined(execute_stmt_SUBST)
  160. #define execute_stmt_SUBST(i,r) NULL
  161. #elif execute_stmt_SUBST == 1
  162. #undef execute_stmt_SUBST
  163. #define execute_stmt_SUBST(i,r) execute_stmt(i,r)
  164. #endif
  165. RPC_STUB( 1, result_t,  insn_t,execute_stmt);
  166. #if !defined(db_create_SUBST)
  167. #  define db_create_SUBST(i,r) NULL
  168. #elif db_create_SUBST == 1
  169. #undef db_create_SUBST
  170. #  define db_create_SUBST(i,r) db_create(i,r)
  171. #endif
  172. RPC_STUB(1,result_t,void,db_create);
  173. RPC_SVC_PROTO(result_t,void,retry,1)
  174. {
  175.   if (!finish_processing())
  176.     gsqltrn_rc.sqlcode = -NULLRES;
  177.   return &gsqltrn_rc;
  178. }
  179. RPC_SVC_PROTO(i4_t,void,is_rpc_ready,1)
  180. {
  181.   static i4_t rc = 0;
  182.   if (!rc)
  183.     rc = getpid();
  184.   finish_processing();
  185.   return &rc;
  186. }
  187. int
  188. main(i4_t argc, char *argv[])
  189. {
  190.   MEET_DEBUGGER;
  191.   bd_catalog_read = (server_init(argc,argv) == 0);
  192. #ifndef CAN_BOOT
  193.   if (!bd_catalog_read)
  194.     return FATAL_EXIT_CODE;
  195. #endif
  196.   run_server();
  197.   /* unreachable code */
  198.   return FATAL_EXIT_CODE;
  199. } /* main */
  200. #endif /* ifndef __GSQLTRN_C__ */