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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: interfaces.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:17:57  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef DBAPI_DRIVER_MSDBLIB___INTERFACES__HPP
  10. #define DBAPI_DRIVER_MSDBLIB___INTERFACES__HPP
  11. /* $Id: interfaces.hpp,v 1000.1 2004/06/01 19:17:57 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:  Vladimir Soussov
  37.  *
  38.  * File Description:  Driver for Microsoft DBLib server
  39.  *
  40.  */
  41. #include <dbapi/driver/public.hpp>
  42. #include <dbapi/driver/util/parameters.hpp>
  43. #include <dbapi/driver/util/handle_stack.hpp>
  44. #include <dbapi/driver/util/pointer_pot.hpp>
  45. #ifdef NCBI_OS_MSWIN
  46. #include <windows.h>
  47. #define DBNTWIN32                   /* must be defined before sqlfront.h */
  48. #include <sqlfront.h>               /* must be after windows.h */
  49. # if defined(_MSC_VER)  &&  (_MSC_VER > 1200)
  50. typedef const LPBYTE LPCBYTE;    /* MSVC7 headers lucks typedef for LPCBYTE */
  51. # endif
  52. #include <sqldb.h>
  53. #define DBVERSION_UNKNOWN DBUNKNOWN
  54. #define DBVERSION_46 DBVER42
  55. #define DBVERSION_100 DBVER60
  56. #define DBCOLINFO    DBCOL
  57. // Other constants and types remapped in interfaces_p.hpp
  58. BEGIN_NCBI_SCOPE
  59. class CMSDBLibContext;
  60. class CMSDBL_Connection;
  61. class CMSDBL_LangCmd;
  62. class CMSDBL_RPCCmd;
  63. class CMSDBL_CursorCmd;
  64. class CMSDBL_BCPInCmd;
  65. class CMSDBL_SendDataCmd;
  66. class CMSDBL_RowResult;
  67. class CMSDBL_ParamResult;
  68. class CMSDBL_ComputeResult;
  69. class CMSDBL_StatusResult;
  70. class CMSDBL_CursorResult;
  71. class CMSDBL_BlobResult;
  72. const unsigned int kDBLibMaxNameLen = 128 + 4;
  73. /////////////////////////////////////////////////////////////////////////////
  74. //
  75. //  CMSDBLibContext::
  76. //
  77. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBLibContext : public I_DriverContext
  78. {
  79.     friend class CDB_Connection;
  80. public:
  81.     CMSDBLibContext(DBINT version = DBVERSION_46);
  82.     //
  83.     // GENERIC functionality (see in <dbapi/driver/interfaces.hpp>)
  84.     //
  85.     virtual bool SetLoginTimeout (unsigned int nof_secs = 0);
  86.     virtual bool SetTimeout      (unsigned int nof_secs = 0);
  87.     virtual bool SetMaxTextImageSize(size_t nof_bytes);
  88.     virtual CDB_Connection* Connect(const string&   srv_name,
  89.                                     const string&   user_name,
  90.                                     const string&   passwd,
  91.                                     TConnectionMode mode,
  92.                                     bool            reusable  = false,
  93.                                     const string&   pool_name = kEmptyStr);
  94.     virtual bool IsAbleTo(ECapability cpb) const;
  95.     virtual ~CMSDBLibContext();
  96.     //
  97.     // DBLIB specific functionality
  98.     //
  99.     // the following methods are optional (driver will use the default
  100.     // values if not called)
  101.     // the values will affect the new connections only
  102.     virtual void DBLIB_SetApplicationName(const string& a_name);
  103.     virtual void DBLIB_SetHostName(const string& host_name);
  104.     virtual void DBLIB_SetPacketSize(int p_size);
  105.     virtual bool DBLIB_SetMaxNofConns(int n);
  106.     static  int  DBLIB_dberr_handler(DBPROCESS*    dblink,   int     severity,
  107.                                      int           dberr,    int     oserr,
  108.                                      const string& dberrstr,
  109.                                      const string& oserrstr);
  110.     static  void DBLIB_dbmsg_handler(DBPROCESS*    dblink,   DBINT   msgno,
  111.                                      int           msgstate, int     severity,
  112.                                      const string& msgtxt,
  113.                                      const string& srvname,
  114.                                      const string& procname,
  115.                                      int           line);
  116. private:
  117.     static CMSDBLibContext* m_pDBLibContext;
  118.     string                m_AppName;
  119.     string                m_HostName;
  120.     short                 m_PacketSize;
  121.     LOGINREC*             m_Login;
  122.     DBPROCESS* x_ConnectToServer(const string&   srv_name,
  123.                                  const string&   user_name,
  124.                                  const string&   passwd,
  125.                                  TConnectionMode mode);
  126. };
  127. /////////////////////////////////////////////////////////////////////////////
  128. //
  129. //  CTL_Connection::
  130. //
  131. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_Connection : public I_Connection
  132. {
  133.     friend class CMSDBLibContext;
  134.     friend class CDB_Connection;
  135.     friend class CMSDBL_LangCmd;
  136.     friend class CMSDBL_RPCCmd;
  137.     friend class CMSDBL_CursorCmd;
  138.     friend class CMSDBL_BCPInCmd;
  139.     friend class CMSDBL_SendDataCmd;
  140. protected:
  141.     CMSDBL_Connection(CMSDBLibContext* cntx, DBPROCESS* con,
  142.                     bool reusable, const string& pool_name);
  143.     virtual bool IsAlive();
  144.     virtual CDB_LangCmd*     LangCmd(const string&       lang_query,
  145.                                      unsigned int        nof_params = 0);
  146.     virtual CDB_RPCCmd*      RPC(const string&           rpc_name,
  147.                                  unsigned int            nof_args);
  148.     virtual CDB_BCPInCmd*    BCPIn(const string&         table_name,
  149.                                    unsigned int          nof_columns);
  150.     virtual CDB_CursorCmd*   Cursor(const string&        cursor_name,
  151.                                     const string&        query,
  152.                                     unsigned int         nof_params,
  153.                                     unsigned int         batch_size = 1);
  154.     virtual CDB_SendDataCmd* SendDataCmd(I_ITDescriptor& desc,
  155.                                          size_t          data_size,
  156.                                          bool            log_it = true);
  157.     virtual bool SendData(I_ITDescriptor& desc, CDB_Image& img,
  158.                           bool log_it = true);
  159.     virtual bool SendData(I_ITDescriptor& desc, CDB_Text&  txt,
  160.                           bool log_it = true);
  161.     virtual bool Refresh();
  162.     virtual const string& ServerName() const;
  163.     virtual const string& UserName()   const;
  164.     virtual const string& Password()   const;
  165.     virtual I_DriverContext::TConnectionMode ConnectMode() const;
  166.     virtual bool IsReusable() const;
  167.     virtual const string& PoolName() const;
  168.     virtual I_DriverContext* Context() const;
  169.     virtual void PushMsgHandler(CDB_UserHandler* h);
  170.     virtual void PopMsgHandler (CDB_UserHandler* h);
  171.     virtual CDB_ResultProcessor* SetResultProcessor(CDB_ResultProcessor* rp);
  172.     virtual void Release();
  173.     virtual ~CMSDBL_Connection();
  174.     void DropCmd(CDB_BaseEnt& cmd);
  175. private:
  176.     bool x_SendData(I_ITDescriptor& desc, CDB_Stream& img, bool log_it = true);
  177.     I_ITDescriptor* x_GetNativeITDescriptor(const CDB_ITDescriptor& descr_in);
  178.     RETCODE x_Results(DBPROCESS* pLink);
  179.     DBPROCESS*      m_Link;
  180.     CMSDBLibContext*  m_Context;
  181.     CPointerPot     m_CMDs;
  182.     CDBHandlerStack m_MsgHandlers;
  183.     string          m_Server;
  184.     string          m_User;
  185.     string          m_Passwd;
  186.     string          m_Pool;
  187.     bool            m_Reusable;
  188.     bool            m_BCPAble;
  189.     bool            m_SecureLogin;
  190.     CDB_ResultProcessor* m_ResProc;
  191. };
  192. /////////////////////////////////////////////////////////////////////////////
  193. //
  194. //  CMSDBL_LangCmd::
  195. //
  196. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_LangCmd : public I_LangCmd
  197. {
  198.     friend class CMSDBL_Connection;
  199. protected:
  200.     CMSDBL_LangCmd(CMSDBL_Connection* conn, DBPROCESS* cmd,
  201.                  const string& lang_query, unsigned int nof_params);
  202.     virtual bool More(const string& query_text);
  203.     virtual bool BindParam(const string& param_name, CDB_Object* param_ptr);
  204.     virtual bool SetParam(const string& param_name, CDB_Object* param_ptr);
  205.     virtual bool Send();
  206.     virtual bool WasSent() const;
  207.     virtual bool Cancel();
  208.     virtual bool WasCanceled() const;
  209.     virtual CDB_Result* Result();
  210.     virtual bool HasMoreResults() const;
  211.     virtual bool HasFailed() const;
  212.     virtual int  RowCount() const;
  213.     virtual void DumpResults();
  214.     virtual void Release();
  215.     virtual ~CMSDBL_LangCmd();
  216. private:
  217.     bool x_AssignParams();
  218.     CMSDBL_Connection* m_Connect;
  219.     DBPROCESS*       m_Cmd;
  220.     string           m_Query;
  221.     CDB_Params       m_Params;
  222.     bool             m_WasSent;
  223.     bool             m_HasFailed;
  224.     I_Result*        m_Res;
  225.     int              m_RowCount;
  226.     unsigned int     m_Status;
  227. };
  228. /////////////////////////////////////////////////////////////////////////////
  229. //
  230. //  CTL_RPCCmd::
  231. //
  232. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_RPCCmd : public I_RPCCmd
  233. {
  234.     friend class CMSDBL_Connection;
  235. protected:
  236.     CMSDBL_RPCCmd(CMSDBL_Connection* con, DBPROCESS* cmd,
  237.                 const string& proc_name, unsigned int nof_params);
  238.     virtual bool BindParam(const string& param_name, CDB_Object* param_ptr,
  239.                            bool out_param = false);
  240.     virtual bool SetParam(const string& param_name, CDB_Object* param_ptr,
  241.                           bool out_param = false);
  242.     virtual bool Send();
  243.     virtual bool WasSent() const;
  244.     virtual bool Cancel();
  245.     virtual bool WasCanceled() const;
  246.     virtual CDB_Result* Result();
  247.     virtual bool HasMoreResults() const;
  248.     virtual bool HasFailed() const ;
  249.     virtual int  RowCount() const;
  250.     virtual void DumpResults();
  251.     virtual void SetRecompile(bool recompile = true);
  252.     virtual void Release();
  253.     ~CMSDBL_RPCCmd();
  254. private:
  255.     bool x_AssignParams(char* param_buff);
  256.     CMSDBL_Connection* m_Connect;
  257.     DBPROCESS*       m_Cmd;
  258.     string           m_Query;
  259.     CDB_Params       m_Params;
  260.     bool             m_WasSent;
  261.     bool             m_HasFailed;
  262.     bool             m_Recompile;
  263.     I_Result*        m_Res;
  264.     int              m_RowCount;
  265.     unsigned int     m_Status;
  266. };
  267. /////////////////////////////////////////////////////////////////////////////
  268. //
  269. //  CMSDBL_CursorCmd::
  270. //
  271. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_CursorCmd : public I_CursorCmd
  272. {
  273.     friend class CMSDBL_Connection;
  274. protected:
  275.     CMSDBL_CursorCmd(CMSDBL_Connection* con, DBPROCESS* cmd,
  276.                    const string& cursor_name, const string& query,
  277.                    unsigned int nof_params);
  278.     virtual bool BindParam(const string& param_name, CDB_Object* pVal);
  279.     virtual CDB_Result* Open();
  280.     virtual bool Update(const string& table_name, const string& upd_query);
  281.     virtual bool UpdateTextImage(unsigned int item_num, CDB_Stream& data, 
  282.  bool log_it = true);
  283.     virtual CDB_SendDataCmd* SendDataCmd(unsigned int item_num, size_t size, 
  284.  bool log_it = true);
  285.     virtual bool Delete(const string& table_name);
  286.     virtual int  RowCount() const;
  287.     virtual bool Close();
  288.     virtual void Release();
  289.     virtual ~CMSDBL_CursorCmd();
  290. private:
  291.     bool x_AssignParams();
  292.     I_ITDescriptor* x_GetITDescriptor(unsigned int item_num);
  293.     CMSDBL_Connection*   m_Connect;
  294.     DBPROCESS*         m_Cmd;
  295.     string             m_Name;
  296.     CDB_LangCmd*       m_LCmd;
  297.     string             m_Query;
  298.     CDB_Params         m_Params;
  299.     bool               m_IsOpen;
  300.     bool               m_HasFailed;
  301.     bool               m_IsDeclared;
  302.     CMSDBL_CursorResult* m_Res;
  303.     int                m_RowCount;
  304. };
  305. /////////////////////////////////////////////////////////////////////////////
  306. //
  307. //  CMSDBL_BCPInCmd::
  308. //
  309. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_BCPInCmd : public I_BCPInCmd
  310. {
  311.     friend class CMSDBL_Connection;
  312. protected:
  313.     CMSDBL_BCPInCmd(CMSDBL_Connection* con, DBPROCESS* cmd,
  314.                   const string& table_name, unsigned int nof_columns);
  315.     virtual bool Bind(unsigned int column_num, CDB_Object* param_ptr);
  316.     virtual bool SendRow();
  317.     virtual bool CompleteBatch();
  318.     virtual bool Cancel();
  319.     virtual bool CompleteBCP();
  320.     virtual void Release();
  321.     ~CMSDBL_BCPInCmd();
  322. private:
  323.     bool x_AssignParams(void* pb);
  324.     CMSDBL_Connection* m_Connect;
  325.     DBPROCESS*       m_Cmd;
  326.     CDB_Params       m_Params;
  327.     bool             m_WasSent;
  328.     bool             m_HasFailed;
  329.     bool             m_HasTextImage;
  330.     bool             m_WasBound;
  331. };
  332. /////////////////////////////////////////////////////////////////////////////
  333. //
  334. //  CMSDBL_SendDataCmd::
  335. //
  336. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_SendDataCmd : public I_SendDataCmd {
  337.     friend class CMSDBL_Connection;
  338. protected:
  339.     CMSDBL_SendDataCmd(CMSDBL_Connection* con, DBPROCESS* cmd, size_t nof_bytes);
  340.     virtual size_t SendChunk(const void* chunk_ptr, size_t nof_bytes);
  341.     virtual void   Release();
  342.     ~CMSDBL_SendDataCmd();
  343. private:
  344.     CMSDBL_Connection* m_Connect;
  345.     DBPROCESS*       m_Cmd;
  346.     size_t           m_Bytes2go;
  347. };
  348. /////////////////////////////////////////////////////////////////////////////
  349. //
  350. //  SDBL_ColDescr::
  351. //
  352. struct SDBL_ColDescr
  353. {
  354.     DBINT      max_length;
  355.     EDB_Type   data_type;
  356.     string     col_name;
  357. };
  358. /////////////////////////////////////////////////////////////////////////////
  359. //
  360. //  CMSDBL_RowResult::
  361. //
  362. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_RowResult : public I_Result
  363. {
  364.     friend class CMSDBL_LangCmd;
  365.     friend class CMSDBL_RPCCmd;
  366.     friend class CMSDBL_Connection;
  367. protected:
  368.     CMSDBL_RowResult(DBPROCESS* cmd, unsigned int* res_status,
  369.                    bool need_init = true);
  370.     virtual EDB_ResType     ResultType() const;
  371.     virtual unsigned int    NofItems() const;
  372.     virtual const char*     ItemName    (unsigned int item_num) const;
  373.     virtual size_t          ItemMaxSize (unsigned int item_num) const;
  374.     virtual EDB_Type        ItemDataType(unsigned int item_num) const;
  375.     virtual bool            Fetch();
  376.     virtual int             CurrentItemNo() const;
  377.     virtual CDB_Object*     GetItem(CDB_Object* item_buf = 0);
  378.     virtual size_t          ReadItem(void* buffer, size_t buffer_size,
  379.                                      bool* is_null = 0);
  380.     virtual I_ITDescriptor* GetImageOrTextDescriptor();
  381.     virtual bool            SkipItem();
  382.     virtual ~CMSDBL_RowResult();
  383.     // data
  384.     DBPROCESS*     m_Cmd;
  385.     int            m_CurrItem;
  386.     bool           m_EOR;
  387.     unsigned int   m_NofCols;
  388.     int            m_CmdNum;
  389.     unsigned int*  m_ResStatus;
  390.     size_t         m_Offset;
  391.     SDBL_ColDescr* m_ColFmt;
  392. };
  393. /////////////////////////////////////////////////////////////////////////////
  394. //
  395. //  CMSDBL_BlobResult::
  396. //
  397. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_BlobResult : public I_Result
  398. {
  399.     friend class CMSDBL_LangCmd;
  400.     friend class CMSDBL_RPCCmd;
  401.     friend class CMSDBL_Connection;
  402. protected:
  403.     CMSDBL_BlobResult(DBPROCESS* cmd);
  404.     virtual EDB_ResType     ResultType() const;
  405.     virtual unsigned int    NofItems() const;
  406.     virtual const char*     ItemName    (unsigned int item_num) const;
  407.     virtual size_t          ItemMaxSize (unsigned int item_num) const;
  408.     virtual EDB_Type        ItemDataType(unsigned int item_num) const;
  409.     virtual bool            Fetch();
  410.     virtual int             CurrentItemNo() const;
  411.     virtual CDB_Object*     GetItem(CDB_Object* item_buf = 0);
  412.     virtual size_t          ReadItem(void* buffer, size_t buffer_size,
  413.                                      bool* is_null = 0);
  414.     virtual I_ITDescriptor* GetImageOrTextDescriptor();
  415.     virtual bool            SkipItem();
  416.     virtual ~CMSDBL_BlobResult();
  417.     // data
  418.     DBPROCESS*    m_Cmd;
  419.     int           m_CurrItem;
  420.     bool          m_EOR;
  421.     int           m_CmdNum;
  422.     char          m_Buff[2048];
  423.     SDBL_ColDescr m_ColFmt;
  424.     int           m_BytesInBuffer;
  425.     int           m_ReadedBytes;
  426. };
  427. /////////////////////////////////////////////////////////////////////////////
  428. //
  429. //  CMSDBL_ParamResult::
  430. //  CMSDBL_ComputeResult::
  431. //  CMSDBL_StatusResult::
  432. //  CMSDBL_CursorResult::
  433. //
  434. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_ParamResult : public CMSDBL_RowResult
  435. {
  436.     friend class CMSDBL_LangCmd;
  437.     friend class CMSDBL_RPCCmd;
  438.     friend class CMSDBL_Connection;
  439. protected:
  440.     CMSDBL_ParamResult(DBPROCESS* cmd, int nof_params);
  441.     virtual EDB_ResType     ResultType() const;
  442.     virtual bool            Fetch();
  443.     virtual CDB_Object*     GetItem(CDB_Object* item_buff = 0);
  444.     virtual size_t          ReadItem(void* buffer, size_t buffer_size,
  445.                                      bool* is_null = 0);
  446.     virtual I_ITDescriptor* GetImageOrTextDescriptor();
  447.     virtual ~CMSDBL_ParamResult();
  448.     // data
  449.     bool m_1stFetch;
  450. };
  451. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_ComputeResult : public CMSDBL_RowResult
  452. {
  453.     friend class CMSDBL_LangCmd;
  454.     friend class CMSDBL_RPCCmd;
  455.     friend class CMSDBL_Connection;
  456. protected:
  457.     CMSDBL_ComputeResult(DBPROCESS* cmd, unsigned int* res_stat);
  458.     virtual EDB_ResType     ResultType() const;
  459.     virtual bool            Fetch();
  460.     virtual int             CurrentItemNo() const;
  461.     virtual CDB_Object*     GetItem(CDB_Object* item_buff = 0);
  462.     virtual size_t          ReadItem(void* buffer, size_t buffer_size,
  463.                                      bool* is_null = 0);
  464.     virtual I_ITDescriptor* GetImageOrTextDescriptor();
  465.     virtual ~CMSDBL_ComputeResult();
  466.     // data
  467.     int  m_ComputeId;
  468.     bool m_1stFetch;
  469. };
  470. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_StatusResult : public I_Result
  471. {
  472.     friend class CMSDBL_LangCmd;
  473.     friend class CMSDBL_RPCCmd;
  474.     friend class CMSDBL_Connection;
  475. protected:
  476.     CMSDBL_StatusResult(DBPROCESS* cmd);
  477.     virtual EDB_ResType     ResultType() const;
  478.     virtual unsigned int    NofItems() const;
  479.     virtual const char*     ItemName    (unsigned int item_num) const;
  480.     virtual size_t          ItemMaxSize (unsigned int item_num) const;
  481.     virtual EDB_Type        ItemDataType(unsigned int item_num) const;
  482.     virtual bool            Fetch();
  483.     virtual int             CurrentItemNo() const ;
  484.     virtual CDB_Object*     GetItem(CDB_Object* item_buff = 0);
  485.     virtual size_t          ReadItem(void* buffer, size_t buffer_size,
  486.                                      bool* is_null = 0);
  487.     virtual I_ITDescriptor* GetImageOrTextDescriptor();
  488.     virtual bool            SkipItem();
  489.     virtual ~CMSDBL_StatusResult();
  490.     // data
  491.     int    m_Val;
  492.     size_t m_Offset;
  493.     bool   m_1stFetch;
  494. };
  495. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_CursorResult : public I_Result
  496. {
  497.     friend class CMSDBL_CursorCmd;
  498. protected:
  499.     CMSDBL_CursorResult(CDB_LangCmd* cmd);
  500.     virtual EDB_ResType     ResultType() const;
  501.     virtual unsigned int    NofItems() const;
  502.     virtual const char*     ItemName    (unsigned int item_num) const;
  503.     virtual size_t          ItemMaxSize (unsigned int item_num) const;
  504.     virtual EDB_Type        ItemDataType(unsigned int item_num) const;
  505.     virtual bool            Fetch();
  506.     virtual int             CurrentItemNo() const;
  507.     virtual CDB_Object*     GetItem(CDB_Object* item_buff = 0);
  508.     virtual size_t          ReadItem(void* buffer, size_t buffer_size,
  509.                                      bool* is_null = 0);
  510.     virtual I_ITDescriptor* GetImageOrTextDescriptor();
  511.     virtual bool            SkipItem();
  512.     virtual ~CMSDBL_CursorResult();
  513.     // data
  514.     CDB_LangCmd* m_Cmd;
  515.     CDB_Result*  m_Res;
  516. };
  517. /////////////////////////////////////////////////////////////////////////////
  518. //
  519. //  CMSDBL_ITDescriptor::
  520. //
  521. #define CMSDBL_ITDESCRIPTOR_TYPE_MAGNUM 0xd01
  522. class NCBI_DBAPIDRIVER_MSDBLIB_EXPORT CMSDBL_ITDescriptor : public I_ITDescriptor
  523. {
  524.     friend class CMSDBL_RowResult;
  525.     friend class CMSDBL_BlobResult;
  526.     friend class CMSDBL_Connection;
  527.     friend class CMSDBL_CursorCmd;
  528. public:
  529.     virtual int DescriptorType() const;
  530.     virtual ~CMSDBL_ITDescriptor();
  531. protected:
  532.     CMSDBL_ITDescriptor(DBPROCESS* m_link, int col_num);
  533.     CMSDBL_ITDescriptor(DBPROCESS* m_link, const CDB_ITDescriptor& inp_d);
  534.     // data
  535.     string   m_ObjName;
  536.     DBBINARY m_TxtPtr[DBTXPLEN];
  537.     DBBINARY m_TimeStamp[DBTXTSLEN];
  538.     bool     m_TxtPtr_is_NULL;
  539.     bool     m_TimeStamp_is_NULL;
  540. };
  541. END_NCBI_SCOPE
  542. #endif  /* NCBI_OS_MSWIN */
  543. #endif  /* DBAPI_DRIVER_DBLIB___INTERFACES__HPP */
  544. /*
  545.  * ===========================================================================
  546.  * $Log: interfaces.hpp,v $
  547.  * Revision 1000.1  2004/06/01 19:17:57  gouriano
  548.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  549.  *
  550.  * Revision 1.6  2004/05/18 19:22:08  gorelenk
  551.  * Conditionaly added typedef for LPCBYTE missed in MSVC7 headers .
  552.  *
  553.  * Revision 1.5  2003/07/17 20:42:47  soussov
  554.  * connections pool improvements
  555.  *
  556.  * Revision 1.4  2003/06/06 18:43:16  soussov
  557.  * Removes SetPacketSize()
  558.  *
  559.  * Revision 1.3  2003/06/05 15:56:19  soussov
  560.  * adds DumpResults method for LangCmd and RPC, SetResultProcessor method for Connection interface
  561.  *
  562.  * Revision 1.2  2003/02/13 15:43:18  ivanov
  563.  * Added export specifier NCBI_DBAPIDRIVER_MSDBLIB_EXPORT for class definitions
  564.  *
  565.  * Revision 1.1  2002/07/02 16:02:25  soussov
  566.  * initial commit
  567.  *
  568.  * ===========================================================================
  569.  */