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

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:          NdbIndexOperation.hpp
  15.  * Include:
  16.  * Link:
  17.  * Author:        Martin Sk鰈d
  18.  * Date:          2002-04-01
  19.  * Version:       0.1
  20.  * Description:   Secondary index support
  21.  * Documentation:
  22.  * Adjust:  2002-04-01  Martin Sk鰈d   First version.
  23.  ****************************************************************************/
  24. #ifndef NdbIndexOperation_H
  25. #define NdbIndexOperation_H
  26. #include "NdbOperation.hpp"
  27. class Index;
  28. class NdbResultSet;
  29. /**
  30.  * @class NdbIndexOperation
  31.  * @brief Class of index operations for use in transactions
  32.  */
  33. class NdbIndexOperation : public NdbOperation
  34. {
  35.   friend class Ndb;
  36.   friend class NdbConnection;
  37. public:
  38.   /**
  39.    * @name Define Standard Operation
  40.    * @{
  41.    */
  42.   /** insert is not allowed */
  43.   int insertTuple();
  44.   /**
  45.    * Define the NdbIndexOperation to be a standard operation of type readTuple.
  46.    * When calling NdbConnection::execute, this operation
  47.    * reads a tuple.
  48.    *
  49.    * @return 0 if successful otherwise -1.
  50.    */
  51.   int readTuple(LockMode);
  52.   /**
  53.    * Define the NdbIndexOperation to be a standard operation of type readTuple.
  54.    * When calling NdbConnection::execute, this operation
  55.    * reads a tuple.
  56.    *
  57.    * @return 0 if successful otherwise -1.
  58.    */
  59.   int readTuple();
  60.   /**
  61.    * Define the NdbIndexOperation to be a standard operation of type
  62.    * readTupleExclusive.
  63.    * When calling NdbConnection::execute, this operation
  64.    * read a tuple using an exclusive lock.
  65.    *
  66.    * @return 0 if successful otherwise -1.
  67.    */
  68.   int readTupleExclusive();
  69.   /**
  70.    * Define the NdbIndexOperation to be a standard operation of type simpleRead.
  71.    * When calling NdbConnection::execute, this operation
  72.    * reads an existing tuple (using shared read lock),
  73.    * but releases lock immediately after read.
  74.    *
  75.    * @note  Using this operation twice in the same transaction
  76.    *        may produce different results (e.g. if there is another
  77.    *        transaction which updates the value between the
  78.    *        simple reads).
  79.    *
  80.    * Note that simpleRead can read the value from any database node while
  81.    * standard read always read the value on the database node which is
  82.    * primary for the record.
  83.    *
  84.    * @return 0 if successful otherwise -1.
  85.    */
  86.   int simpleRead();
  87.   /**
  88.    * Define the NdbOperation to be a standard operation of type committedRead.
  89.    * When calling NdbConnection::execute, this operation 
  90.    * read latest committed value of the record.
  91.    *
  92.    * This means that if another transaction is updating the 
  93.    * record, then the current transaction will not wait.  
  94.    * It will instead use the latest committed value of the 
  95.    * record.
  96.    *
  97.    * @return 0 if successful otherwise -1.
  98.    */
  99.   int dirtyRead();
  100. #ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED
  101.   int committedRead();
  102. #endif
  103.   /**
  104.    * Define the NdbIndexOperation to be a standard operation of type 
  105.    * updateTuple.
  106.    *
  107.    * When calling NdbConnection::execute, this operation
  108.    * updates a tuple in the table.
  109.    *
  110.    * @return 0 if successful otherwise -1.
  111.    */
  112.   int updateTuple();
  113.   /**
  114.    * Define the NdbIndexOperation to be a standard operation of type 
  115.    * deleteTuple.
  116.    *
  117.    * When calling NdbConnection::execute, this operation
  118.    * deletes a tuple.
  119.    *
  120.    * @return 0 if successful otherwise -1.
  121.    */
  122.   int deleteTuple();
  123.   /**
  124.    * Define the NdbIndexOperation to be a standard operation of type 
  125.    * dirtyUpdate.
  126.    *
  127.    * When calling NdbConnection::execute, this operation
  128.    * updates without two-phase commit.
  129.    *
  130.    * @return 0 if successful otherwise -1.
  131.    */
  132.   int dirtyUpdate();
  133.   /** @} *********************************************************************/
  134.   /**
  135.    * @name Define Interpreted Program Operation 
  136.    * @{
  137.    */
  138.   /**
  139.    * Update a tuple using an interpreted program.
  140.    *
  141.    * @return 0 if successful otherwise -1.
  142.    */
  143.   int interpretedUpdateTuple();
  144.   /**
  145.    * Delete a tuple using an interpreted program.
  146.    *
  147.    * @return 0 if successful otherwise -1.
  148.    */
  149.   int interpretedDeleteTuple();
  150.   
  151.   /** @} *********************************************************************/
  152. private:
  153.   NdbIndexOperation(Ndb* aNdb);
  154.   ~NdbIndexOperation();
  155.   void closeScan();
  156.   int receiveTCINDXREF(NdbApiSignal* aSignal);
  157.   // Overloaded method from NdbOperation
  158.   void setLastFlag(NdbApiSignal* signal, Uint32 lastFlag);
  159.   // Overloaded methods from NdbCursorOperation
  160.   int executeCursor(int ProcessorId);
  161.   // Overloaded methods from NdbCursorOperation
  162.   int indxInit(const class NdbIndexImpl* anIndex,
  163.        const class NdbTableImpl* aTable, 
  164.        NdbConnection* myConnection);
  165.   int equal_impl(const class NdbColumnImpl*, const char* aValue, Uint32 len);
  166.   int prepareSend(Uint32  TC_ConnectPtr, Uint64  TransactionId);
  167.   // Private attributes
  168.   const NdbIndexImpl* m_theIndex;
  169.   const NdbTableImpl* m_thePrimaryTable;
  170.   Uint32 m_theIndexDefined[NDB_MAX_ATTRIBUTES_IN_INDEX][3];
  171.   Uint32 m_theIndexLen;     // Length of the index in words
  172.   Uint32 m_theNoOfIndexDefined;  // The number of index attributes
  173.   friend struct Ndb_free_list_t<NdbIndexOperation>;
  174. };
  175. #endif