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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: public.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:19:25  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: public.cpp,v 1000.1 2004/06/01 19:19:25 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/public.hpp>
  41. BEGIN_NCBI_SCOPE
  42. ////////////////////////////////////////////////////////////////////////////
  43. //  CCDB_Connection::
  44. //
  45. CDB_Connection::CDB_Connection(I_Connection* c)
  46. {
  47.     if ( !c ) {
  48.         throw CDB_ClientEx(eDB_Error, 200001, "CDB_Connection::CDB_Connection",
  49.                            "No valid connection provided");
  50.     }
  51.     m_Connect = c;
  52.     m_Connect->Acquire((CDB_BaseEnt**) &m_Connect);
  53. }
  54. bool CDB_Connection::IsAlive()
  55. {
  56.     return (m_Connect == 0) ? false : m_Connect->IsAlive();
  57. }
  58. inline void s_CheckConnection(I_Connection* conn, const char* method_name)
  59. {
  60.     if ( !conn ) {
  61.         throw CDB_ClientEx(eDB_Warning, 200002,
  62.                            "CDB_Connection::" + string(method_name),
  63.                            "Connection has been closed");
  64.     }
  65. }
  66. CDB_LangCmd* CDB_Connection::LangCmd(const string& lang_query,
  67.                                      unsigned int  nof_params)
  68. {
  69.   
  70.     s_CheckConnection(m_Connect, "LangCmd");
  71.     return m_Connect->LangCmd(lang_query, nof_params);
  72. }
  73. CDB_RPCCmd* CDB_Connection::RPC(const string& rpc_name,
  74.                                 unsigned int  nof_args)
  75. {
  76.     s_CheckConnection(m_Connect, "RPC");
  77.     return m_Connect->RPC(rpc_name, nof_args);
  78. }
  79. CDB_BCPInCmd* CDB_Connection::BCPIn(const string& table_name,
  80.                                     unsigned int  nof_columns)
  81. {
  82.     s_CheckConnection(m_Connect, "BCPIn");
  83.     return m_Connect->BCPIn(table_name, nof_columns);
  84. }
  85. CDB_CursorCmd* CDB_Connection::Cursor(const string& cursor_name,
  86.                                       const string& query,
  87.                                       unsigned int  nof_params,
  88.                                       unsigned int  batch_size)
  89. {
  90.     s_CheckConnection(m_Connect, "Cursor");
  91.     return m_Connect->Cursor(cursor_name, query, nof_params, batch_size);
  92. }
  93. CDB_SendDataCmd* CDB_Connection::SendDataCmd(I_ITDescriptor& desc,
  94.                                              size_t data_size, bool log_it)
  95. {
  96.     s_CheckConnection(m_Connect, "SendDataCmd");
  97.     return m_Connect->SendDataCmd(desc, data_size, log_it);
  98. }
  99. bool CDB_Connection::SendData(I_ITDescriptor& desc, CDB_Text& txt, bool log_it)
  100. {
  101.     s_CheckConnection(m_Connect, "SendData(txt)");
  102.     return m_Connect->SendData(desc, txt, log_it);
  103. }
  104. bool CDB_Connection::SendData(I_ITDescriptor& desc, CDB_Image& img, bool log_it)
  105. {
  106.     s_CheckConnection(m_Connect, "SendData(image)");
  107.     return m_Connect->SendData(desc, img, log_it);
  108. }
  109. bool CDB_Connection::Refresh()
  110. {
  111.     s_CheckConnection(m_Connect, "Refresh");
  112.     return m_Connect->Refresh();
  113. }
  114. const string& CDB_Connection::ServerName() const
  115. {
  116.     s_CheckConnection(m_Connect, "ServerName");
  117.     return m_Connect->ServerName();
  118. }
  119. const string& CDB_Connection::UserName() const
  120. {
  121.     s_CheckConnection(m_Connect, "UserName");
  122.     return m_Connect->UserName();
  123. }
  124. const string& CDB_Connection::Password() const
  125. {
  126.     s_CheckConnection(m_Connect, "Password");
  127.     return m_Connect->Password();
  128. }
  129. I_DriverContext::TConnectionMode  CDB_Connection::ConnectMode() const
  130. {
  131.     s_CheckConnection(m_Connect, "ConnectMode");
  132.     return m_Connect->ConnectMode();
  133. }
  134. bool CDB_Connection::IsReusable() const
  135. {
  136.     s_CheckConnection(m_Connect, "IsReusable");
  137.     return m_Connect->IsReusable();
  138. }
  139. const string& CDB_Connection::PoolName() const
  140. {
  141.     s_CheckConnection(m_Connect, "PoolName");
  142.     return m_Connect->PoolName();
  143. }
  144. I_DriverContext* CDB_Connection::Context() const
  145. {
  146.     s_CheckConnection(m_Connect, "Context");
  147.     return m_Connect->Context();
  148. }
  149. void CDB_Connection::PushMsgHandler(CDB_UserHandler* h)
  150. {
  151.     s_CheckConnection(m_Connect, "PushMsgHandler");
  152.     m_Connect->PushMsgHandler(h);
  153. }
  154. void CDB_Connection::PopMsgHandler(CDB_UserHandler* h)
  155. {
  156.     s_CheckConnection(m_Connect, "PopMsgHandler");
  157.     m_Connect->PopMsgHandler(h);
  158. }
  159. CDB_ResultProcessor*
  160. CDB_Connection::SetResultProcessor(CDB_ResultProcessor* rp)
  161. {
  162.     return m_Connect? m_Connect->SetResultProcessor(rp) : 0;
  163. }
  164. CDB_Connection::~CDB_Connection()
  165. {
  166.     if ( m_Connect ) {
  167.         m_Connect->Release();
  168.         Context()->x_Recycle(m_Connect, m_Connect->IsReusable());
  169.     }
  170. }
  171. ////////////////////////////////////////////////////////////////////////////
  172. //  CDB_Result::
  173. //
  174. CDB_Result::CDB_Result(I_Result* r)
  175. {
  176.     if ( !r ) {
  177.         throw CDB_ClientEx(eDB_Error, 200004, "CDB_Result::CDB_Result",
  178.                            "No valid result provided");
  179.     }
  180.     m_Res = r;
  181.     m_Res->Acquire((CDB_BaseEnt**) &m_Res);
  182. }
  183. inline void s_CheckResult(I_Result* res, const char* method_name)
  184. {
  185.     if ( !res ) {
  186.         throw CDB_ClientEx(eDB_Warning, 200003,
  187.                            "CDB_Result::" + string(method_name),
  188.                            "This result is not available anymore");
  189.     }
  190. }
  191. EDB_ResType CDB_Result::ResultType() const
  192. {
  193.     s_CheckResult(m_Res, "ResultType");
  194.     return m_Res->ResultType();
  195. }
  196. unsigned int CDB_Result::NofItems() const
  197. {
  198.     s_CheckResult(m_Res, "NofItems");
  199.     return m_Res->NofItems();
  200. }
  201. const char* CDB_Result::ItemName(unsigned int item_num) const
  202. {
  203.     s_CheckResult(m_Res, "ItemName");
  204.     return m_Res->ItemName(item_num);
  205. }
  206. size_t CDB_Result::ItemMaxSize(unsigned int item_num) const
  207. {
  208.     s_CheckResult(m_Res, "ItemMaxSize");
  209.     return m_Res->ItemMaxSize(item_num);
  210. }
  211. EDB_Type CDB_Result::ItemDataType(unsigned int item_num) const
  212. {
  213.     s_CheckResult(m_Res, "ItemDataType");
  214.     return m_Res->ItemDataType(item_num);
  215. }
  216. bool CDB_Result::Fetch()
  217. {
  218.     s_CheckResult(m_Res, "Fetch");
  219.     return m_Res->Fetch();
  220. }
  221. int CDB_Result::CurrentItemNo() const
  222. {
  223.     s_CheckResult(m_Res, "CurrentItemNo");
  224.     return m_Res->CurrentItemNo();
  225. }
  226. CDB_Object* CDB_Result::GetItem(CDB_Object* item_buf)
  227. {
  228.     s_CheckResult(m_Res, "GetItem");
  229.     return m_Res->GetItem(item_buf);
  230. }
  231. size_t CDB_Result::ReadItem(void* buffer, size_t buffer_size, bool* is_null)
  232. {
  233.     s_CheckResult(m_Res, "ReadItem");
  234.     return m_Res->ReadItem(buffer, buffer_size, is_null);
  235. }
  236. I_ITDescriptor* CDB_Result::GetImageOrTextDescriptor()
  237. {
  238.     s_CheckResult(m_Res, "GetImageOrTextDescriptor");
  239.     return m_Res->GetImageOrTextDescriptor();
  240. }
  241. bool CDB_Result::SkipItem()
  242. {
  243.     s_CheckResult(m_Res, "SkipItem");
  244.     return m_Res->SkipItem();
  245. }
  246. CDB_Result::~CDB_Result()
  247. {
  248.     if ( m_Res ) {
  249.         m_Res->Release();
  250.     }
  251. }
  252. ////////////////////////////////////////////////////////////////////////////
  253. //  CDB_LangCmd::
  254. //
  255. CDB_LangCmd::CDB_LangCmd(I_LangCmd* c)
  256. {
  257.     if ( !c ) {
  258.         throw CDB_ClientEx(eDB_Error, 200004, "CDB_LangCmd::CDB_LangCmd",
  259.                            "No valid command provided");
  260.     }
  261.     m_Cmd = c;
  262.     m_Cmd->Acquire((CDB_BaseEnt**) &m_Cmd);
  263. }
  264. inline void s_CheckLangCmd(I_LangCmd* cmd, const char* method_name)
  265. {
  266.     if ( !cmd ) {
  267.         throw CDB_ClientEx(eDB_Warning, 200005,
  268.                            "CDB_LangCmd::" + string(method_name),
  269.                            "This command can not be used anymore");
  270.     }
  271. }
  272. bool CDB_LangCmd::More(const string& query_text)
  273. {
  274.     s_CheckLangCmd(m_Cmd, "More");
  275.     return m_Cmd->More(query_text);
  276. }
  277. bool CDB_LangCmd::BindParam(const string& param_name, CDB_Object* pVal)
  278. {
  279.     s_CheckLangCmd(m_Cmd, "BindParam");
  280.     return m_Cmd->BindParam(param_name, pVal);
  281. }
  282. bool CDB_LangCmd::SetParam(const string& param_name, CDB_Object* pVal)
  283. {
  284.     s_CheckLangCmd(m_Cmd, "SetParam");
  285.     return m_Cmd->SetParam(param_name, pVal);
  286. }
  287. bool CDB_LangCmd::Send()
  288. {
  289.     s_CheckLangCmd(m_Cmd, "Send");
  290.     return m_Cmd->Send();
  291. }
  292. bool CDB_LangCmd::WasSent() const
  293. {
  294.     s_CheckLangCmd(m_Cmd, "WasSent");
  295.     return m_Cmd->WasSent();
  296. }
  297. bool CDB_LangCmd::Cancel()
  298. {
  299.     s_CheckLangCmd(m_Cmd, "Cancel");
  300.     return m_Cmd->Cancel();
  301. }
  302. bool CDB_LangCmd::WasCanceled() const
  303. {
  304.     s_CheckLangCmd(m_Cmd, "WasCanceled");
  305.     return m_Cmd->WasCanceled();
  306. }
  307. CDB_Result* CDB_LangCmd::Result()
  308. {
  309.     s_CheckLangCmd(m_Cmd, "Result");
  310.     return m_Cmd->Result();
  311. }
  312. bool CDB_LangCmd::HasMoreResults() const
  313. {
  314.     s_CheckLangCmd(m_Cmd, "HasMoreResults");
  315.     return m_Cmd->HasMoreResults();
  316. }
  317. bool CDB_LangCmd::HasFailed() const
  318. {
  319.     s_CheckLangCmd(m_Cmd, "HasFailed");
  320.     return m_Cmd->HasFailed();
  321. }
  322. int CDB_LangCmd::RowCount() const
  323. {
  324.     s_CheckLangCmd(m_Cmd, "RowCount");
  325.     return m_Cmd->RowCount();
  326. }
  327. void CDB_LangCmd::DumpResults()
  328. {
  329.     s_CheckLangCmd(m_Cmd, "DumpResults");
  330.     m_Cmd->DumpResults();
  331. }
  332. CDB_LangCmd::~CDB_LangCmd()
  333. {
  334.     if ( m_Cmd ) {
  335.         m_Cmd->Release();
  336.     }
  337. }
  338. /////////////////////////////////////////////////////////////////////////////
  339. //  CDB_RPCCmd::
  340. //
  341. CDB_RPCCmd::CDB_RPCCmd(I_RPCCmd* c)
  342. {
  343.     if ( !c ) {
  344.         throw CDB_ClientEx(eDB_Error, 200006, "CDB_RPCCmd::CDB_RPCCmd",
  345.                            "No valid command provided");
  346.     }
  347.     m_Cmd = c;
  348.     m_Cmd->Acquire((CDB_BaseEnt**) &m_Cmd);
  349. }
  350. inline void s_CheckRPCCmd(I_RPCCmd* cmd, const char* method_name)
  351. {
  352.     if ( !cmd ) {
  353.         throw CDB_ClientEx(eDB_Warning, 200005,
  354.                            "CDB_RPCCmd::" + string(method_name),
  355.                            "This command can not be used anymore");
  356.     }
  357. }
  358. bool CDB_RPCCmd::BindParam(const string& param_name, CDB_Object* pVal,
  359.                            bool out_param)
  360. {
  361.     s_CheckRPCCmd(m_Cmd, "BindParam");
  362.     return m_Cmd->BindParam(param_name, pVal, out_param);
  363. }
  364. bool CDB_RPCCmd::SetParam(const string& param_name, CDB_Object* pVal,
  365.                           bool out_param)
  366. {
  367.     s_CheckRPCCmd(m_Cmd, "SetParam");
  368.     return m_Cmd->SetParam(param_name, pVal, out_param);
  369. }
  370. bool CDB_RPCCmd::Send()
  371. {
  372.     s_CheckRPCCmd(m_Cmd, "Send");
  373.     return m_Cmd->Send();
  374. }
  375. bool CDB_RPCCmd::WasSent() const
  376. {
  377.     s_CheckRPCCmd(m_Cmd, "WasSent");
  378.     return m_Cmd->WasSent();
  379. }
  380. bool CDB_RPCCmd::Cancel()
  381. {
  382.     s_CheckRPCCmd(m_Cmd, "Cancel");
  383.     return m_Cmd->Cancel();
  384. }
  385. bool CDB_RPCCmd::WasCanceled() const
  386. {
  387.     s_CheckRPCCmd(m_Cmd, "WasCanceled");
  388.     return m_Cmd->WasCanceled();
  389. }
  390. CDB_Result* CDB_RPCCmd::Result()
  391. {
  392.     s_CheckRPCCmd(m_Cmd, "Result");
  393.     return m_Cmd->Result();
  394. }
  395. bool CDB_RPCCmd::HasMoreResults() const
  396. {
  397.     s_CheckRPCCmd(m_Cmd, "HasMoreResults");
  398.     return m_Cmd->HasMoreResults();
  399. }
  400. bool CDB_RPCCmd::HasFailed() const
  401. {
  402.     s_CheckRPCCmd(m_Cmd, "HasFailed");
  403.     return m_Cmd->HasFailed();
  404. }
  405. int CDB_RPCCmd::RowCount() const
  406. {
  407.     s_CheckRPCCmd(m_Cmd, "RowCount");
  408.     return m_Cmd->RowCount();
  409. }
  410. void CDB_RPCCmd::DumpResults()
  411. {
  412.     s_CheckRPCCmd(m_Cmd, "DumpResults");
  413.     m_Cmd->DumpResults();
  414. }
  415. void CDB_RPCCmd::SetRecompile(bool recompile)
  416. {
  417.     s_CheckRPCCmd(m_Cmd, "SetRecompile");
  418.     m_Cmd->SetRecompile(recompile);
  419. }
  420. CDB_RPCCmd::~CDB_RPCCmd()
  421. {
  422.     if ( m_Cmd ) {
  423.         m_Cmd->Release();
  424.     }
  425. }
  426. ////////////////////////////////////////////////////////////////////////////
  427. //  CDB_BCPInCmd::
  428. //
  429. CDB_BCPInCmd::CDB_BCPInCmd(I_BCPInCmd* c)
  430. {
  431.     if ( !c ) {
  432.         throw CDB_ClientEx(eDB_Error, 200007, "CDB_BCPInCmd::CDB_BCPInCmd",
  433.                            "No valid command provided");
  434.     }
  435.     m_Cmd = c;
  436.     m_Cmd->Acquire((CDB_BaseEnt**) &m_Cmd);
  437. }
  438. inline void s_CheckBCPInCmd(I_BCPInCmd* cmd, const char* method_name)
  439. {
  440.     if ( !cmd ) {
  441.         throw CDB_ClientEx(eDB_Warning, 200005,
  442.                            "CDB_BCPInCmd::" + string(method_name),
  443.                            "This command can not be used anymore");
  444.     }
  445. }
  446. bool CDB_BCPInCmd::Bind(unsigned int column_num, CDB_Object* pVal)
  447. {
  448.     s_CheckBCPInCmd(m_Cmd, "Bind");
  449.     return m_Cmd->Bind(column_num, pVal);
  450. }
  451. bool CDB_BCPInCmd::SendRow()
  452. {
  453.     s_CheckBCPInCmd(m_Cmd, "SendRow");
  454.     return m_Cmd->SendRow();
  455. }
  456. bool CDB_BCPInCmd::Cancel()
  457. {
  458.     s_CheckBCPInCmd(m_Cmd, "Cancel");
  459.     return m_Cmd->Cancel();
  460. }
  461. bool CDB_BCPInCmd::CompleteBatch()
  462. {
  463.     s_CheckBCPInCmd(m_Cmd, "CompleteBatch");
  464.     return m_Cmd->CompleteBatch();
  465. }
  466. bool CDB_BCPInCmd::CompleteBCP()
  467. {
  468.     s_CheckBCPInCmd(m_Cmd, "CompleteBCP");
  469.     return m_Cmd->CompleteBCP();
  470. }
  471. CDB_BCPInCmd::~CDB_BCPInCmd()
  472. {
  473.     if ( m_Cmd ) {
  474.         m_Cmd->Release();
  475.     }
  476. }
  477. /////////////////////////////////////////////////////////////////////////////
  478. //  CDB_CursorCmd::
  479. //
  480. CDB_CursorCmd::CDB_CursorCmd(I_CursorCmd* c)
  481. {
  482.     if ( !c ) {
  483.         throw CDB_ClientEx(eDB_Error, 200006, "CDB_CursorCmd::CDB_CursorCmd",
  484.                            "No valid command provided");
  485.     }
  486.     m_Cmd = c;
  487.     m_Cmd->Acquire((CDB_BaseEnt**) &m_Cmd);
  488. }
  489. inline void s_CheckCursorCmd(I_CursorCmd* cmd, const char* method_name)
  490. {
  491.     if ( !cmd ) {
  492.         throw CDB_ClientEx(eDB_Warning, 200005,
  493.                            "CDB_CursorCmd::" + string(method_name),
  494.                            "This command can not be used anymore");
  495.     }
  496. }
  497. bool CDB_CursorCmd::BindParam(const string& param_name, CDB_Object* pVal)
  498. {
  499.     s_CheckCursorCmd(m_Cmd, "BindParam");
  500.     return m_Cmd->BindParam(param_name, pVal);
  501. }
  502. CDB_Result* CDB_CursorCmd::Open()
  503. {
  504.     s_CheckCursorCmd(m_Cmd, "Open");
  505.     return m_Cmd->Open();
  506. }
  507. bool CDB_CursorCmd::Update(const string& table_name, const string& upd_query)
  508. {
  509.     s_CheckCursorCmd(m_Cmd, "Update");
  510.     return m_Cmd->Update(table_name, upd_query);
  511. }
  512. bool CDB_CursorCmd::UpdateTextImage(unsigned int item_num, CDB_Stream& data, bool log_it)
  513. {
  514.     s_CheckCursorCmd(m_Cmd, "UpdateTextImage");
  515.     return m_Cmd->UpdateTextImage(item_num, data, log_it);
  516. }
  517. CDB_SendDataCmd* CDB_CursorCmd::SendDataCmd(unsigned int item_num,
  518.                                             size_t size, bool log_it)
  519. {
  520.     s_CheckCursorCmd(m_Cmd, "SendDataCmd");
  521.     return m_Cmd->SendDataCmd(item_num, size, log_it);
  522. }
  523. bool CDB_CursorCmd::Delete(const string& table_name)
  524. {
  525.     s_CheckCursorCmd(m_Cmd, "Delete");
  526.     return m_Cmd->Delete(table_name);
  527. }
  528. int CDB_CursorCmd::RowCount() const
  529. {
  530.     s_CheckCursorCmd(m_Cmd, "RowCount");
  531.     return m_Cmd->RowCount();
  532. }
  533. bool CDB_CursorCmd::Close()
  534. {
  535.     s_CheckCursorCmd(m_Cmd, "Close");
  536.     return m_Cmd->Close();
  537. }
  538. CDB_CursorCmd::~CDB_CursorCmd()
  539. {
  540.     if ( m_Cmd ) {
  541.         m_Cmd->Release();
  542.     }
  543. }
  544. /////////////////////////////////////////////////////////////////////////////
  545. //  CDB_SendDataCmd::
  546. //
  547. CDB_SendDataCmd::CDB_SendDataCmd(I_SendDataCmd* c)
  548. {
  549.     if ( !c ) {
  550.         throw CDB_ClientEx(eDB_Error, 200006,
  551.                            "CDB_SendDataCmd::CDB_SendDataCmd",
  552.                            "No valid command provided");
  553.     }
  554.     m_Cmd = c;
  555.     m_Cmd->Acquire((CDB_BaseEnt**) &m_Cmd);
  556. }
  557. size_t CDB_SendDataCmd::SendChunk(const void* pChunk, size_t nofBytes)
  558. {
  559.     if ( !m_Cmd ) {
  560.         throw CDB_ClientEx(eDB_Warning, 200005, "CDB_CursorCmd::SendChunk",
  561.                            "This command can not be used anymore");
  562.     }
  563.     return m_Cmd->SendChunk(pChunk, nofBytes);
  564. }
  565. CDB_SendDataCmd::~CDB_SendDataCmd()
  566. {
  567.     if (m_Cmd) {
  568.         m_Cmd->Release();
  569.     }
  570. }
  571. /////////////////////////////////////////////////////////////////////////////
  572. //  CDB_ITDescriptor::
  573. //
  574. int CDB_ITDescriptor::DescriptorType() const
  575. {
  576.     return 0;
  577. }
  578. CDB_ITDescriptor::~CDB_ITDescriptor()
  579. {
  580. }
  581. /////////////////////////////////////////////////////////////////////////////
  582. //  CDB_ResultProcessor::
  583. //
  584. CDB_ResultProcessor::CDB_ResultProcessor(CDB_Connection* c)
  585. {
  586.     m_Con = c;
  587.     if ( m_Con )
  588.         m_Prev = m_Con->SetResultProcessor(this);
  589. }
  590. void CDB_ResultProcessor::ProcessResult(CDB_Result& res)
  591. {
  592.     while (res.Fetch());  // fetch and forget
  593. }
  594. CDB_ResultProcessor::~CDB_ResultProcessor()
  595. {
  596.     if ( m_Con )
  597.         m_Con->SetResultProcessor(m_Prev);
  598. }
  599. END_NCBI_SCOPE
  600. /*
  601.  * ===========================================================================
  602.  * $Log: public.cpp,v $
  603.  * Revision 1000.1  2004/06/01 19:19:25  gouriano
  604.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  605.  *
  606.  * Revision 1.8  2004/05/17 21:11:38  gorelenk
  607.  * Added include of PCH ncbi_pch.hpp
  608.  *
  609.  * Revision 1.7  2003/06/20 19:11:25  vakatov
  610.  * CDB_ResultProcessor::
  611.  *  - added MS-Win DLL export macro
  612.  *  - made the destructor virtual
  613.  *  - moved code from the header to the source file
  614.  *  - formally reformatted the code
  615.  *
  616.  * Revision 1.6  2003/06/05 15:58:38  soussov
  617.  * adds DumpResults method for LangCmd and RPC, SetResultProcessor method
  618.  * for Connection interface, adds CDB_ResultProcessor class
  619.  *
  620.  * Revision 1.5  2003/01/29 22:35:05  soussov
  621.  * replaces const string& with const char* in inlines
  622.  *
  623.  * Revision 1.4  2002/03/26 15:32:24  soussov
  624.  * new image/text operations added
  625.  *
  626.  * Revision 1.3  2001/11/06 17:59:54  lavr
  627.  * Formatted uniformly as the rest of the library
  628.  *
  629.  * Revision 1.2  2001/09/27 20:08:32  vakatov
  630.  * Added "DB_" (or "I_") prefix where it was missing
  631.  *
  632.  * Revision 1.1  2001/09/21 23:40:00  vakatov
  633.  * -----  Initial (draft) revision.  -----
  634.  * This is a major revamp (by Denis Vakatov, with help from Vladimir Soussov)
  635.  * of the DBAPI "driver" libs originally written by Vladimir Soussov.
  636.  * The revamp involved massive code shuffling and grooming, numerous local
  637.  * API redesigns, adding comments and incorporating DBAPI to the C++ Toolkit.
  638.  *
  639.  * ===========================================================================
  640.  */