dbutil.c
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:4k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: dbutil.c,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:33:53  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* FreeTDS - Library of routines accessing Sybase and Microsoft databases
  10.  * Copyright (C) 1998-1999  Brian Bruns
  11.  *
  12.  * This library is free software; you can redistribute it and/or
  13.  * modify it under the terms of the GNU Library General Public
  14.  * License as published by the Free Software Foundation; either
  15.  * version 2 of the License, or (at your option) any later version.
  16.  *
  17.  * This library is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  20.  * Library General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU Library General Public
  23.  * License along with this library; if not, write to the
  24.  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  25.  * Boston, MA 02111-1307, USA.
  26.  */
  27. #include <tds_config.h>
  28. #include "sybdb.h"
  29. #include "dblib.h"
  30. /* #include "fortify.h" */
  31. static char  software_version[]   = "$Id: dbutil.c,v 1000.0 2003/10/29 20:33:53 gouriano Exp $";
  32. static void *no_unused_var_warn[] = {software_version,
  33.                                      no_unused_var_warn};
  34. extern MHANDLEFUNC g_dblib_msg_handler;
  35. extern EHANDLEFUNC g_dblib_err_handler;
  36. /* The next 2 functions will be the reciever for the info and error messages
  37.  * that come from the TDS layer.  The address of this function is passed to
  38.  * the TDS layer in the dbinit function.  This way, when the TDS layer
  39.  * recieves an informational message from the server that it can be dealt with
  40.  * immediately (or so). It takes a pointer to a DBPROCESS, its just that the
  41.  * TDS layer didn't what it really was */
  42. int dblib_handle_info_message(TDSCONTEXT *tds_ctx, TDSSOCKET *tds, TDSMSGINFO *msg)
  43. {
  44. DBPROCESS *dbproc = NULL;
  45. if (tds && tds->parent) {
  46. dbproc = (DBPROCESS*)tds->parent;
  47. }
  48. if( msg->msg_number >= 0 )
  49. {
  50. /* now check to see if the user supplied a function, if not ignore the
  51.  * problem */
  52. if(g_dblib_msg_handler)
  53. {
  54. g_dblib_msg_handler(dbproc,
  55. msg->msg_number,
  56. msg->msg_state,
  57. msg->msg_level, 
  58. msg->message,
  59. msg->server, 
  60. msg->proc_name,
  61. msg->line_number);
  62. }
  63. else
  64. {
  65. #if 0
  66. fprintf (stderr, "INFO..No User supplied info msg handler..Msg %d, Level %d, State %d, Server %s, Line %dn%sn",
  67. msg->msg_number,
  68. msg->msg_level, 
  69. msg->msg_state,
  70. msg->server, 
  71. msg->line_number,  
  72. msg->message);
  73. #endif
  74. }
  75. /* and now clean up the structure for next time */
  76. tds_reset_msg_info(msg);
  77. }
  78.         return 1;
  79. }
  80. int dblib_handle_err_message(TDSCONTEXT *tds_ctx, TDSSOCKET *tds, TDSMSGINFO *msg)
  81. {
  82. DBPROCESS *dbproc = NULL;
  83. if (tds && tds->parent) {
  84. dbproc = (DBPROCESS*)tds->parent;
  85. }
  86. if( msg->msg_number > 0 )
  87. {
  88. /* now check to see if the user supplied a function, if not ignore the
  89.  * problem */
  90. if(g_dblib_err_handler)
  91. {
  92. g_dblib_err_handler(dbproc,
  93. msg->msg_level,
  94. msg->msg_number,
  95. msg->msg_state, 
  96. msg->message,
  97. msg->server); 
  98. }
  99. else
  100. {
  101. #if 0
  102. fprintf (stderr, "ERR..No User supplied err msg handler..Msg %d, Level %d, State %d, Server %s, Line %dn%sn",
  103. msg->msg_number,
  104. msg->msg_level, 
  105. msg->msg_state,
  106. msg->server, 
  107. msg->line_number,  
  108. msg->message);
  109. #endif
  110. }
  111. /* and now clean up the structure for next time */
  112. tds_reset_msg_info(msg);
  113. }
  114.         return 1;
  115. }
  116. void dblib_setTDS_version(TDSLOGIN *tds_login, DBINT version)
  117. {
  118. switch(version)
  119. {
  120. case DBVERSION_42:
  121. tds_set_version(tds_login, 4, 2);
  122. break;
  123. case DBVERSION_46:
  124. tds_set_version(tds_login, 4, 6);
  125. break;
  126. case DBVERSION_100:
  127. tds_set_version(tds_login, 5, 0);
  128. break;
  129. }
  130. }