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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: conn_impl.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/04/21 14:47:52  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.15
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef _CONN_IMPL_HPP_
  10. #define _CONN_IMPL_HPP_
  11. /* $Id: conn_impl.hpp,v 1000.3 2004/04/21 14:47:52 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE                          
  15. *               National Center for Biotechnology Information
  16. *                                                                          
  17. *  This software/database is a "United States Government Work" under the   
  18. *  terms of the United States Copyright Act.  It was written as part of    
  19. *  the author's official duties as a United States Government employee and 
  20. *  thus cannot be copyrighted.  This software/database is freely available 
  21. *  to the public for use. The National Library of Medicine and the U.S.    
  22. *  Government have not placed any restriction on its use or reproduction.  
  23. *                                                                          
  24. *  Although all reasonable efforts have been taken to ensure the accuracy  
  25. *  and reliability of the software and data, the NLM and the U.S.          
  26. *  Government do not and cannot warrant the performance or results that    
  27. *  may be obtained by using this software or data. The NLM and the U.S.    
  28. *  Government disclaim all warranties, express or implied, including       
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.                                                                
  31. *                                                                          
  32. *  Please cite the author in any work or product based on this material.   
  33. *
  34. * ===========================================================================
  35. *
  36. * File Name:  $Id: conn_impl.hpp,v 1000.3 2004/04/21 14:47:52 gouriano Exp $
  37. *
  38. * Author:  Michael Kholodov
  39. *   
  40. * File Description:  Connection implementation
  41. *
  42. *
  43. * $Log: conn_impl.hpp,v $
  44. * Revision 1000.3  2004/04/21 14:47:52  gouriano
  45. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.15
  46. *
  47. * Revision 1.15  2004/04/08 15:56:58  kholodov
  48. * Multiple bug fixes and optimizations
  49. *
  50. * Revision 1.14  2004/03/08 22:15:19  kholodov
  51. * Added: 3 new Get...() methods internally
  52. *
  53. * Revision 1.13  2003/11/18 16:59:45  kholodov
  54. * Added: CloneConnection() method
  55. *
  56. * Revision 1.12  2003/05/16 20:17:28  kholodov
  57. * Modified: default 0 arguments in PrepareCall()
  58. *
  59. * Revision 1.11  2003/03/07 21:21:15  kholodov
  60. * Added: IsAlive() method
  61. *
  62. * Revision 1.10  2002/11/27 17:19:49  kholodov
  63. * Added: Error output redirection to CToMultiExHandler object.
  64. *
  65. * Revision 1.9  2002/09/30 20:45:34  kholodov
  66. * Added: ForceSingle() method to enforce single connection used
  67. *
  68. * Revision 1.8  2002/09/23 18:25:10  kholodov
  69. * Added: GetDataSource() method.
  70. *
  71. * Revision 1.7  2002/09/18 18:49:26  kholodov
  72. * Modified: class declaration and Action method to reflect
  73. * direct inheritance of CActiveObject from IEventListener
  74. *
  75. * Revision 1.6  2002/09/16 19:34:41  kholodov
  76. * Added: bulk insert support
  77. *
  78. * Revision 1.5  2002/05/16 22:11:11  kholodov
  79. * Improved: using minimum connections possible
  80. *
  81. * Revision 1.4  2002/02/08 22:43:11  kholodov
  82. * Set/GetDataBase() renamed to Set/GetDatabase() respectively
  83. *
  84. * Revision 1.3  2002/02/08 21:29:55  kholodov
  85. * SetDataBase() restored, connection cloning algorithm changed
  86. *
  87. * Revision 1.2  2002/02/08 17:47:34  kholodov
  88. * Removed SetDataBase() method
  89. *
  90. * Revision 1.1  2002/01/30 14:51:22  kholodov
  91. * User DBAPI implementation, first commit
  92. *
  93. *
  94. *
  95. */
  96. #include <dbapi/dbapi.hpp>
  97. #include "active_obj.hpp"
  98. BEGIN_NCBI_SCOPE
  99. class CDataSource;
  100. class CConnection : public CActiveObject, 
  101.                     public IConnection
  102. {
  103. public:
  104.     CConnection(CDataSource* ds);
  105. public:
  106.     virtual ~CConnection();
  107.     virtual void SetMode(EConnMode mode);
  108.     virtual void ResetMode(EConnMode mode);
  109.     virtual unsigned int GetModeMask();
  110.     virtual void ForceSingle(bool enable);
  111.     virtual IDataSource* GetDataSource();
  112.     virtual void Connect(const string& user,
  113.                          const string& password,
  114.                          const string& server,
  115.                          const string& database = kEmptyStr);
  116.     virtual IConnection* CloneConnection();
  117.     // New part begin
  118.     virtual IStatement* GetStatement();
  119.     virtual ICallableStatement* GetCallableStatement(const string& proc,
  120.                                                      int nofArgs = 0);
  121.     virtual ICursor* GetCursor(const string& name,
  122.                                const string& sql,
  123.                                int nofArgs,
  124.                                int batchSize);
  125.     virtual IBulkInsert* GetBulkInsert(const string& table_name,
  126.                                        unsigned int nof_cols);
  127.     // New part end
  128.     virtual IStatement* CreateStatement();
  129.     virtual ICallableStatement* PrepareCall(const string& proc,
  130.                                             int nofArgs = 0);
  131.     virtual ICursor* CreateCursor(const string& name,
  132.                                   const string& sql,
  133.                                   int nofArgs,
  134.                                   int batchSize);
  135.     virtual IBulkInsert* CreateBulkInsert(const string& table_name,
  136.                                           unsigned int nof_cols);
  137.     virtual void Close();
  138.     CConnection* Clone();
  139.     CDB_Connection* GetCDB_Connection() {
  140.         return m_connection;
  141.     }
  142.     CDB_Connection* CloneCDB_Conn();
  143.     virtual void SetDatabase(const string& name);
  144.     virtual string GetDatabase();
  145.     virtual bool IsAlive();
  146.     void SetDbName(const string& name, CDB_Connection* conn = 0);
  147.     bool IsAux() {
  148.         return m_connCounter < 0;
  149.     }
  150.     // Interface IEventListener implementation
  151.     virtual void Action(const CDbapiEvent& e);
  152.     // If enabled, redirects all error messages 
  153.     // to CDB_MultiEx object (see below)
  154.     virtual void MsgToEx(bool v);
  155.     // Returns all error messages as a CDB_MultiEx object
  156.     virtual CDB_MultiEx* GetErrorAsEx();
  157.     // Returns all error messages as a single string
  158.     virtual string GetErrorInfo();
  159. protected:
  160.     CConnection(class CDB_Connection *conn, 
  161.                 CDataSource* ds);
  162.     // Clone connection, if the original cmd structure is taken
  163.     CConnection* GetAuxConn();
  164.     // void DeleteConn(CConnection* conn);
  165.     class CToMultiExHandler* GetHandler();
  166.     void FreeResources();
  167. private:
  168.     string m_database;
  169.     class CDataSource* m_ds;
  170.     CDB_Connection *m_connection;
  171.     int m_connCounter;
  172.     bool m_connUsed;
  173.     unsigned int m_modeMask;
  174.     bool m_forceSingle;
  175.     class CToMultiExHandler *m_multiExH;
  176.     // New part begin
  177.     class CStatement *m_stmt;
  178.     class CCallableStatement *m_cstmt;
  179.     class CCursor *m_cursor;
  180.     class CBulkInsert *m_bulkInsert;
  181.     // New part end
  182. };
  183. //====================================================================
  184. END_NCBI_SCOPE
  185. #endif // _CONN_IMPL_HPP_