NdbResultSet.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*****************************************************************************
  14.  * Name:          NdbResultSet.hpp
  15.  * Include:
  16.  * Link:
  17.  * Author:        Martin Sk鰈d
  18.  * Date:          2002-04-01
  19.  * Version:       0.1
  20.  * Description:   Cursor class
  21.  * Documentation:
  22.  * Adjust:  2002-04-01  Martin Sk鰈d   First version.
  23.  ****************************************************************************/
  24. #ifndef NdbResultSet_H
  25. #define NdbResultSet_H
  26. #include <NdbScanOperation.hpp>
  27. /**
  28.  * @class NdbResultSet
  29.  * @brief NdbResultSet contains a NdbScanOperation.
  30.  */
  31. class NdbResultSet
  32. {
  33.   friend class NdbScanOperation;
  34. public:
  35.   
  36.   /**
  37.    * Get the next tuple in a scan transaction. 
  38.    * 
  39.    * After each call to NdbResult::nextResult
  40.    * the buffers and NdbRecAttr objects defined in 
  41.    * NdbOperation::getValue are updated with values 
  42.    * from the scanned tuple. 
  43.    *
  44.    * @param  fetchAllowed  If set to false, then fetching is disabled
  45.    *
  46.    * The NDB API will contact the NDB Kernel for more tuples 
  47.    * when necessary to do so unless you set the fetchAllowed 
  48.    * to false. 
  49.    * This will force NDB to process any records it
  50.    * already has in it's caches. When there are no more cached 
  51.    * records it will return 2. You must then call nextResult
  52.    * with fetchAllowed = true in order to contact NDB for more 
  53.    * records.
  54.    *
  55.    * fetchAllowed = false is useful when you want to update or 
  56.    * delete all the records fetched in one transaction(This will save a
  57.    *  lot of round trip time and make updates or deletes of scanned 
  58.    * records a lot faster). 
  59.    * While nextResult(false)
  60.    * returns 0 take over the record to another transaction. When 
  61.    * nextResult(false) returns 2 you must execute and commit the other 
  62.    * transaction. This will cause the locks to be transferred to the 
  63.    * other transaction, updates or deletes will be made and then the 
  64.    * locks will be released.
  65.    * After that, call nextResult(true) which will fetch new records and
  66.    * cache them in the NdbApi. 
  67.    * 
  68.    * @note  If you don't take over the records to another transaction the 
  69.    *        locks on those records will be released the next time NDB Kernel
  70.    *        is contacted for more records.
  71.    *
  72.    * @note  Please contact for examples of efficient scan
  73.    *        updates and deletes.
  74.    * 
  75.    * @note  See ndb/examples/ndbapi_scan_example for usage.
  76.    *
  77.    * @return 
  78.    * -  -1: if unsuccessful,<br>
  79.    * -   0: if another tuple was received, and<br> 
  80.    * -   1: if there are no more tuples to scan.
  81.    * -   2: if there are no more cached records in NdbApi
  82.    */
  83.   int nextResult(bool fetchAllowed = true, bool forceSend = false);
  84.   /**
  85.    * Close result set (scan)
  86.    */
  87.   void close(bool forceSend = false);
  88.   /**
  89.    * Restart
  90.    */
  91.   int restart(bool forceSend = false);
  92.   
  93.   /**
  94.    * Transfer scan operation to an updating transaction. Use this function 
  95.    * when a scan has found a record that you want to update. 
  96.    * 1. Start a new transaction.
  97.    * 2. Call the function takeOverForUpdate using your new transaction 
  98.    *    as parameter, all the properties of the found record will be copied 
  99.    *    to the new transaction.
  100.    * 3. When you execute the new transaction, the lock held by the scan will 
  101.    *    be transferred to the new transaction(it's taken over).
  102.    *
  103.    * @note You must have started the scan with openScanExclusive
  104.    *       to be able to update the found tuple.
  105.    *
  106.    * @param updateTrans the update transaction connection.
  107.    * @return an NdbOperation or NULL.
  108.    */
  109.   NdbOperation* updateTuple();
  110.   NdbOperation* updateTuple(NdbConnection* updateTrans);
  111.   /**
  112.    * Transfer scan operation to a deleting transaction. Use this function 
  113.    * when a scan has found a record that you want to delete. 
  114.    * 1. Start a new transaction.
  115.    * 2. Call the function takeOverForDelete using your new transaction 
  116.    *    as parameter, all the properties of the found record will be copied 
  117.    *    to the new transaction.
  118.    * 3. When you execute the new transaction, the lock held by the scan will 
  119.    *    be transferred to the new transaction(its taken over).
  120.    *
  121.    * @note You must have started the scan with openScanExclusive
  122.    *       to be able to delete the found tuple.
  123.    *
  124.    * @param deleteTrans the delete transaction connection.
  125.    * @return an NdbOperation or NULL.
  126.    */
  127.   int deleteTuple();
  128.   int deleteTuple(NdbConnection* takeOverTransaction);
  129.   /**
  130.    * Get underlying operation
  131.    */
  132.   NdbOperation* getOperation();
  133. private:
  134.   NdbResultSet(NdbScanOperation*);
  135.   ~NdbResultSet();
  136.   void init();
  137.   NdbScanOperation* m_operation;
  138. };
  139. inline
  140. NdbOperation*
  141. NdbResultSet::getOperation(){
  142.   return m_operation;
  143. }
  144. #endif