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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: interfaces.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:19:11  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: interfaces.cpp,v 1000.1 2004/06/01 19:19:11 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE                          
  13.  *               National Center for Biotechnology Information
  14.  *                                                                          
  15.  *  This software/database is a "United States Government Work" under the   
  16.  *  terms of the United States Copyright Act.  It was written as part of    
  17.  *  the author's official duties as a United States Government employee and 
  18.  *  thus cannot be copyrighted.  This software/database is freely available 
  19.  *  to the public for use. The National Library of Medicine and the U.S.    
  20.  *  Government have not placed any restriction on its use or reproduction.  
  21.  *                                                                          
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy  
  23.  *  and reliability of the software and data, the NLM and the U.S.          
  24.  *  Government do not and cannot warrant the performance or results that    
  25.  *  may be obtained by using this software or data. The NLM and the U.S.    
  26.  *  Government disclaim all warranties, express or implied, including       
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.                                                                
  29.  *                                                                          
  30.  *  Please cite the author in any work or product based on this material.   
  31.  *
  32.  *  ===========================================================================
  33.  *
  34.  * Author:  Vladimir Soussov
  35.  *
  36.  * File Description:  Data Server public interfaces
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <dbapi/driver/interfaces.hpp>
  41. #include <dbapi/driver/public.hpp>
  42. BEGIN_NCBI_SCOPE
  43. ////////////////////////////////////////////////////////////////////////////
  44. //  I_ITDescriptor::
  45. //
  46. I_ITDescriptor::~I_ITDescriptor()
  47. {
  48.     return;
  49. }
  50. ////////////////////////////////////////////////////////////////////////////
  51. //  CDB_BaseEnt::
  52. //
  53. void CDB_BaseEnt::Release()
  54. {
  55.     m_BR = 0;
  56. }
  57. CDB_BaseEnt::~CDB_BaseEnt()
  58. {
  59.     if (m_BR)
  60.         *m_BR = 0;
  61. }
  62. CDB_Result* CDB_BaseEnt::Create_Result(I_Result& result)
  63. {
  64.     return new CDB_Result(&result);
  65. }
  66. ////////////////////////////////////////////////////////////////////////////
  67. //  I_BaseCmd::
  68. //  I_LangCmd::
  69. //  I_RPCCmd::
  70. //  I_BCPInCmd::
  71. //  I_CursorCmd::
  72. //  I_SendDataCmd::
  73. //
  74. I_BaseCmd::~I_BaseCmd()
  75. {
  76.     return;
  77. }
  78. I_LangCmd::~I_LangCmd()
  79. {
  80.     return;
  81. }
  82. I_RPCCmd::~I_RPCCmd()
  83. {
  84.     return;
  85. }
  86. I_BCPInCmd::~I_BCPInCmd()
  87. {
  88.     return;
  89. }
  90. I_CursorCmd::~I_CursorCmd()
  91. {
  92.     return;
  93. }
  94. I_SendDataCmd::~I_SendDataCmd()
  95. {
  96.     return;
  97. }
  98. ////////////////////////////////////////////////////////////////////////////
  99. //  I_Result::
  100. //
  101. I_Result::~I_Result()
  102. {
  103.     return;
  104. }
  105. ////////////////////////////////////////////////////////////////////////////
  106. //  I_DriverContext::
  107. //
  108. I_DriverContext::I_DriverContext()
  109. {
  110.     PushCntxMsgHandler    ( &CDB_UserHandler::GetDefault() );
  111.     PushDefConnMsgHandler ( &CDB_UserHandler::GetDefault() );
  112. }
  113. void I_DriverContext::PushCntxMsgHandler(CDB_UserHandler* h)
  114. {
  115.     CFastMutexGuard mg(m_Mtx);
  116.     m_CntxHandlers.Push(h);
  117. }
  118. void I_DriverContext::PopCntxMsgHandler(CDB_UserHandler* h)
  119. {
  120.     CFastMutexGuard mg(m_Mtx);
  121.     m_CntxHandlers.Pop(h);
  122. }
  123. void I_DriverContext::PushDefConnMsgHandler(CDB_UserHandler* h)
  124. {
  125.     CFastMutexGuard mg(m_Mtx);
  126.     m_ConnHandlers.Push(h);
  127. }
  128. void I_DriverContext::PopDefConnMsgHandler(CDB_UserHandler* h)
  129. {
  130.     CFastMutexGuard mg(m_Mtx);
  131.     m_ConnHandlers.Pop(h);
  132. }
  133. void I_DriverContext::x_Recycle(I_Connection* conn, bool conn_reusable)
  134. {
  135.     CFastMutexGuard mg(m_Mtx);
  136.     m_InUse.Remove((TPotItem) conn);
  137.     if ( conn_reusable ) {
  138.         m_NotInUse.Add((TPotItem) conn);
  139.     } else {
  140.         delete conn;
  141.     }
  142. }
  143. void I_DriverContext::CloseUnusedConnections(const string&   srv_name,
  144.                                              const string&   pool_name)
  145. {
  146.     CFastMutexGuard mg(m_Mtx);
  147.     I_Connection* con;
  148.     
  149.     // close all connections first
  150.     for (int i = m_NotInUse.NofItems();  i--; ) {
  151.         con = (I_Connection*)(m_NotInUse.Get(i));
  152.         if((!srv_name.empty()) && srv_name.compare(con->ServerName())) continue;
  153.         if((!pool_name.empty()) && pool_name.compare(con->PoolName())) continue;
  154.         m_NotInUse.Remove(i);
  155.         delete con;
  156.     }
  157. }
  158. unsigned int I_DriverContext::NofConnections(const string& srv_name,
  159.                                           const string& pool_name) const
  160. {
  161.     if ( srv_name.empty() && pool_name.empty()) {
  162.         return m_InUse.NofItems() + m_NotInUse.NofItems();
  163.     }
  164.     CFastMutexGuard mg(m_Mtx);
  165.     int n = 0;
  166.     I_Connection* con;
  167.     for (int i = m_NotInUse.NofItems(); i--;) {
  168.         con= (I_Connection*) (m_NotInUse.Get(i));
  169.         if((!srv_name.empty()) && srv_name.compare(con->ServerName())) continue;
  170.         if((!pool_name.empty()) && pool_name.compare(con->PoolName())) continue;
  171.         ++n;
  172.     }
  173.     for (int i = m_InUse.NofItems(); i--;) {
  174.         con= (I_Connection*) (m_InUse.Get(i));
  175.         if((!srv_name.empty()) && srv_name.compare(con->ServerName())) continue;
  176.         if((!pool_name.empty()) && pool_name.compare(con->PoolName())) continue;
  177.         ++n;
  178.     }
  179.     return n;
  180. }
  181. CDB_Connection* I_DriverContext::Create_Connection(I_Connection& connection)
  182. {
  183.     return new CDB_Connection(&connection);
  184. }
  185. I_DriverContext::~I_DriverContext()
  186. {
  187.     return;
  188. }
  189. ////////////////////////////////////////////////////////////////////////////
  190. //  I_Connection::
  191. //
  192. CDB_LangCmd* I_Connection::Create_LangCmd(I_LangCmd&lang_cmd)
  193. {
  194.     return new CDB_LangCmd(&lang_cmd);
  195. }
  196. CDB_RPCCmd* I_Connection::Create_RPCCmd(I_RPCCmd&rpc_cmd)
  197. {
  198.     return new CDB_RPCCmd(&rpc_cmd);
  199. }
  200. CDB_BCPInCmd* I_Connection::Create_BCPInCmd(I_BCPInCmd& bcpin_cmd)
  201. {
  202.     return new CDB_BCPInCmd(&bcpin_cmd);
  203. }
  204. CDB_CursorCmd* I_Connection::Create_CursorCmd(I_CursorCmd& cursor_cmd)
  205. {
  206.     return new CDB_CursorCmd(&cursor_cmd);
  207. }
  208. CDB_SendDataCmd* I_Connection::Create_SendDataCmd(I_SendDataCmd& senddata_cmd)
  209. {
  210.     return new CDB_SendDataCmd(&senddata_cmd);
  211. }
  212. I_Connection::~I_Connection()
  213. {
  214.     return;
  215. }
  216. ////////////////////////////////////////////////////////////////////////////
  217. //  I_DriverMgr::
  218. //
  219. I_DriverMgr::~I_DriverMgr(void)
  220. {
  221.     return;
  222. }
  223. END_NCBI_SCOPE
  224. /*
  225.  * ===========================================================================
  226.  * $Log: interfaces.cpp,v $
  227.  * Revision 1000.1  2004/06/01 19:19:11  gouriano
  228.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  229.  *
  230.  * Revision 1.9  2004/05/17 21:11:38  gorelenk
  231.  * Added include of PCH ncbi_pch.hpp
  232.  *
  233.  * Revision 1.8  2003/07/17 20:44:57  soussov
  234.  * connections pool improvements
  235.  *
  236.  * Revision 1.7  2002/01/20 07:21:02  vakatov
  237.  * I_DriverMgr:: -- added virtual destructor
  238.  *
  239.  * Revision 1.6  2001/11/06 17:59:53  lavr
  240.  * Formatted uniformly as the rest of the library
  241.  *
  242.  * Revision 1.5  2001/10/01 20:09:29  vakatov
  243.  * Introduced a generic default user error handler and the means to
  244.  * alternate it. Added an auxiliary error handler class
  245.  * "CDB_UserHandler_Stream".
  246.  * Moved "{Push/Pop}{Cntx/Conn}MsgHandler()" to the generic code
  247.  * (in I_DriverContext).
  248.  *
  249.  * Revision 1.4  2001/09/27 20:08:32  vakatov
  250.  * Added "DB_" (or "I_") prefix where it was missing
  251.  *
  252.  * Revision 1.3  2001/09/26 23:23:29  vakatov
  253.  * Moved the err.message handlers' stack functionality (generic storage
  254.  * and methods) to the "abstract interface" level.
  255.  *
  256.  * Revision 1.2  2001/09/24 19:48:49  vakatov
  257.  * + implementation for CDB_BaseEnt::Create_Result
  258.  *
  259.  * Revision 1.1  2001/09/21 23:39:59  vakatov
  260.  * -----  Initial (draft) revision.  -----
  261.  * This is a major revamp (by Denis Vakatov, with help from Vladimir Soussov)
  262.  * of the DBAPI "driver" libs originally written by Vladimir Soussov.
  263.  * The revamp involved massive code shuffling and grooming, numerous local
  264.  * API redesigns, adding comments and incorporating DBAPI to the C++ Toolkit.
  265.  *
  266.  * ===========================================================================
  267.  */