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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: interfaces.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/01 21:02:21  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CORE_002] Dev-tree R1.11
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef DBAPI_DRIVER_MYSQL___INTERFACES__HPP
  10. #define DBAPI_DRIVER_MYSQL___INTERFACES__HPP
  11. /* $Id: interfaces.hpp,v 1000.1 2004/04/01 21:02:21 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.  * Author:  Anton Butanayev
  37.  *
  38.  * File Description:
  39.  *    Driver for MySQL server
  40.  *
  41.  */
  42. #include <dbapi/driver/public.hpp>
  43. #include <dbapi/driver/util/parameters.hpp>
  44. #if defined(_WIN32) || defined(_WIN64)
  45. # include <windows.h>
  46. # include <winsock.h>
  47. #endif
  48. #include <mysql.h>
  49. BEGIN_NCBI_SCOPE
  50. class CMySQLContext;
  51. class CMySQL_Connection;
  52. class CMySQL_LangCmd;
  53. /////////////////////////////////////////////////////////////////////////////
  54. //
  55. //  CMySQLContext::
  56. //
  57. class NCBI_DBAPIDRIVER_MYSQL_EXPORT CMySQLContext : public I_DriverContext
  58. {
  59.     friend class CMySQL_Connection;
  60. public:
  61.     CMySQLContext();
  62.     virtual bool SetLoginTimeout (unsigned int nof_secs = 0);
  63.     virtual bool SetTimeout      (unsigned int nof_secs = 0);
  64.     virtual bool SetMaxTextImageSize(size_t nof_bytes);
  65.     virtual CDB_Connection* Connect(const string&   srv_name,
  66.                                     const string&   user_name,
  67.                                     const string&   passwd,
  68.                                     TConnectionMode mode,
  69.                                     bool            reusable  = false,
  70.                                     const string&   pool_name = kEmptyStr);
  71.     virtual bool IsAbleTo(ECapability cpb) const;
  72.     virtual ~CMySQLContext();
  73. };
  74. /////////////////////////////////////////////////////////////////////////////
  75. //
  76. //  CMySQL_Connection::
  77. //
  78. class NCBI_DBAPIDRIVER_MYSQL_EXPORT CMySQL_Connection : public I_Connection
  79. {
  80.     friend class CMySQLContext;
  81. protected:
  82.     CMySQL_Connection(CMySQLContext* cntx,
  83.                       const string&  srv_name,
  84.                       const string&  user_name,
  85.                       const string&  passwd);
  86.     virtual ~CMySQL_Connection();
  87.     virtual bool IsAlive();
  88.     virtual CDB_LangCmd*     LangCmd(const string& lang_query,
  89.                                      unsigned int  nof_params = 0);
  90.     virtual CDB_SendDataCmd* SendDataCmd(I_ITDescriptor& desc,
  91.                                          size_t          data_size,
  92.                                          bool            log_it = true);
  93.     virtual CDB_RPCCmd*      RPC(const string& rpc_name,
  94.                                  unsigned int  nof_args);
  95.     virtual CDB_BCPInCmd*    BCPIn(const string& table_name,
  96.                                    unsigned int  nof_columns);
  97.     virtual CDB_CursorCmd* Cursor(const string& cursor_name,
  98.                                   const string& query,
  99.                                   unsigned int nof_params,
  100.                                   unsigned int batch_size = 1);
  101.     virtual bool SendData(I_ITDescriptor& desc, CDB_Image& img,
  102.                           bool log_it = true);
  103.     virtual bool SendData(I_ITDescriptor& desc, CDB_Text&  txt,
  104.                           bool log_it = true);
  105.     virtual bool Refresh();
  106.     virtual const string& ServerName() const;
  107.     virtual const string& UserName()   const;
  108.     virtual const string& Password()   const;
  109.     virtual I_DriverContext::TConnectionMode ConnectMode() const;
  110.     virtual bool IsReusable() const;
  111.     virtual const string& PoolName() const;
  112.     virtual I_DriverContext* Context() const;
  113.     virtual void PushMsgHandler(CDB_UserHandler* h);
  114.     virtual void PopMsgHandler (CDB_UserHandler* h);
  115.     virtual CDB_ResultProcessor* SetResultProcessor(CDB_ResultProcessor* rp);
  116.     virtual void Release();
  117.     void DropCmd(CDB_BaseEnt& cmd);
  118. private:
  119.     friend class CMySQL_LangCmd;
  120.     friend class CMySQL_RowResult;
  121.     CMySQLContext* m_Context;
  122.     MYSQL          m_MySQL;
  123.     CDB_ResultProcessor* m_ResProc;
  124. };
  125. /////////////////////////////////////////////////////////////////////////////
  126. //
  127. //  CMySQL_LangCmd::
  128. //
  129. class NCBI_DBAPIDRIVER_MYSQL_EXPORT CMySQL_LangCmd : public I_LangCmd
  130. {
  131.     friend class CMySQL_Connection;
  132. protected:
  133.     CMySQL_LangCmd(CMySQL_Connection* conn,
  134.                    const string&      lang_query,
  135.                    unsigned int       nof_params);
  136.     virtual ~CMySQL_LangCmd();
  137.     virtual bool        More(const string& query_text);
  138.     virtual bool        BindParam(const string& param_name,
  139.                                   CDB_Object*   param_ptr);
  140.     virtual bool        SetParam(const string& param_name,
  141.                                  CDB_Object*   param_ptr);
  142.     virtual bool        Send();
  143.     virtual bool        WasSent() const;
  144.     virtual bool        Cancel();
  145.     virtual bool        WasCanceled() const;
  146.     virtual CDB_Result* Result();
  147.     virtual bool        HasMoreResults() const;
  148.     virtual bool        HasFailed() const;
  149.     virtual int         RowCount() const;
  150.     virtual void        DumpResults();
  151.     virtual void        Release();
  152.     int                 LastInsertId() const;
  153. public:
  154.     string EscapeString(const char* str, unsigned long len);
  155. private:
  156.     CMySQL_Connection* m_Connect;
  157.     string             m_Query;
  158.     bool               m_HasResults;
  159. };
  160. /////////////////////////////////////////////////////////////////////////////
  161. //
  162. //  SMySQL_ColDescr::
  163. //
  164. struct SMySQL_ColDescr
  165. {
  166.     unsigned long max_length;
  167.     EDB_Type      data_type;
  168.     string        col_name;
  169. };
  170. /////////////////////////////////////////////////////////////////////////////
  171. //
  172. //  CMySQL_RowResult::
  173. //
  174. class NCBI_DBAPIDRIVER_MYSQL_EXPORT CMySQL_RowResult : public I_Result
  175. {
  176.     friend class CMySQL_LangCmd;
  177. protected:
  178.     CMySQL_RowResult(CMySQL_Connection* conn);
  179.     virtual ~CMySQL_RowResult();
  180.     virtual EDB_ResType     ResultType() const;
  181.     virtual unsigned int    NofItems() const;
  182.     virtual const char*     ItemName(unsigned int item_num) const;
  183.     virtual size_t          ItemMaxSize(unsigned int item_num) const;
  184.     virtual EDB_Type        ItemDataType(unsigned int item_num) const;
  185.     virtual bool            Fetch();
  186.     virtual int             CurrentItemNo() const;
  187.     virtual CDB_Object*     GetItem(CDB_Object* item_buf = 0);
  188.     virtual size_t          ReadItem(void* buffer, size_t buffer_size,
  189.                                      bool* is_null = 0);
  190.     virtual I_ITDescriptor* GetImageOrTextDescriptor();
  191.     virtual bool            SkipItem();
  192. private:
  193.     MYSQL_RES*         m_Result;
  194.     MYSQL_ROW          m_Row;
  195.     unsigned long*     m_Lengths;
  196.     CMySQL_Connection* m_Connect;
  197.     int                m_CurrItem;
  198.     unsigned int       m_NofCols;
  199.     SMySQL_ColDescr*   m_ColFmt;
  200. };
  201. END_NCBI_SCOPE
  202. #endif
  203. /*
  204.  * ===========================================================================
  205.  * $Log: interfaces.hpp,v $
  206.  * Revision 1000.1  2004/04/01 21:02:21  gouriano
  207.  * PRODUCTION: UPGRADED [CORE_002] Dev-tree R1.11
  208.  *
  209.  * Revision 1.11  2004/03/24 19:48:27  vysokolo
  210.  * Addaed support of blob
  211.  *
  212.  * Revision 1.10  2003/07/17 20:42:26  soussov
  213.  * connections pool improvements
  214.  *
  215.  * Revision 1.9  2003/06/06 18:48:14  soussov
  216.  * Removes SetPacketSize()
  217.  *
  218.  * Revision 1.8  2003/06/06 11:24:44  ucko
  219.  * Comment out declaration of CMySQLContext::SetPacketSize(), since it
  220.  * isn't defined anywhere and nothing actually seems to need it.
  221.  *
  222.  * Revision 1.7  2003/06/05 15:56:54  soussov
  223.  * adds DumpResults method for LangCmd and RPC, SetResultProcessor method for Connection interface
  224.  *
  225.  * Revision 1.6  2003/05/29 21:23:35  butanaev
  226.  * Added function to return last insert id.
  227.  *
  228.  * Revision 1.5  2003/02/26 17:08:30  kuznets
  229.  * Added NCBI_DBAPIDRIVER_MYSQL_EXPORT declaration to classes for Windows DLL.
  230.  *
  231.  * Revision 1.4  2003/02/26 17:03:28  kuznets
  232.  * Fixed to compile on windows. Added #include <windows.h> (Required by MySQL manual)
  233.  *
  234.  * Revision 1.3  2003/01/06 20:23:06  vakatov
  235.  * Formally reformatted to closer meet the C++ Toolkit / DBAPI style
  236.  *
  237.  * Revision 1.2  2002/08/28 17:17:57  butanaev
  238.  * Improved error handling, demo app.
  239.  *
  240.  * Revision 1.1  2002/08/13 20:21:59  butanaev
  241.  * The beginning.
  242.  *
  243.  * ===========================================================================
  244.  */