mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
e4f0614cf4
mysql-test/r/ndb_blob.result: bug-6018 mysql-test/t/ndb_blob.test: bug-6018 ndb/include/ndbapi/NdbBlob.hpp: bug-6018 ndb/include/ndbapi/NdbConnection.hpp: bug-6018 ndb/include/ndbapi/NdbIndexOperation.hpp: bug-6018 ndb/include/ndbapi/NdbOperation.hpp: bug-6018 ndb/src/ndbapi/NdbBlob.cpp: bug-6018 ndb/src/ndbapi/NdbConnection.cpp: bug-6018 ndb/src/ndbapi/NdbDictionaryImpl.cpp: bug-6018 ndb/src/ndbapi/NdbIndexOperation.cpp: bug-6018 ndb/src/ndbapi/NdbOperation.cpp: bug-6018 ndb/src/ndbapi/NdbOperationExec.cpp: bug-6018 ndb/test/ndbapi/testBlobs.cpp: bug-6018
205 lines
5.7 KiB
C++
205 lines
5.7 KiB
C++
/* Copyright (C) 2003 MySQL AB
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
/*****************************************************************************
|
|
* Name: NdbIndexOperation.hpp
|
|
* Include:
|
|
* Link:
|
|
* Author: Martin Sköld
|
|
* Date: 2002-04-01
|
|
* Version: 0.1
|
|
* Description: Secondary index support
|
|
* Documentation:
|
|
* Adjust: 2002-04-01 Martin Sköld First version.
|
|
****************************************************************************/
|
|
|
|
#ifndef NdbIndexOperation_H
|
|
#define NdbIndexOperation_H
|
|
|
|
#include "NdbOperation.hpp"
|
|
|
|
class Index;
|
|
class NdbResultSet;
|
|
|
|
/**
|
|
* @class NdbIndexOperation
|
|
* @brief Class of index operations for use in transactions
|
|
*/
|
|
class NdbIndexOperation : public NdbOperation
|
|
{
|
|
friend class Ndb;
|
|
friend class NdbConnection;
|
|
|
|
public:
|
|
/**
|
|
* @name Define Standard Operation
|
|
* @{
|
|
*/
|
|
|
|
/** insert is not allowed */
|
|
int insertTuple();
|
|
|
|
/**
|
|
* Define the NdbIndexOperation to be a standard operation of type readTuple.
|
|
* When calling NdbConnection::execute, this operation
|
|
* reads a tuple.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int readTuple(LockMode);
|
|
|
|
/**
|
|
* Define the NdbIndexOperation to be a standard operation of type readTuple.
|
|
* When calling NdbConnection::execute, this operation
|
|
* reads a tuple.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int readTuple();
|
|
|
|
/**
|
|
* Define the NdbIndexOperation to be a standard operation of type
|
|
* readTupleExclusive.
|
|
* When calling NdbConnection::execute, this operation
|
|
* read a tuple using an exclusive lock.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int readTupleExclusive();
|
|
|
|
/**
|
|
* Define the NdbIndexOperation to be a standard operation of type simpleRead.
|
|
* When calling NdbConnection::execute, this operation
|
|
* reads an existing tuple (using shared read lock),
|
|
* but releases lock immediately after read.
|
|
*
|
|
* @note Using this operation twice in the same transaction
|
|
* may produce different results (e.g. if there is another
|
|
* transaction which updates the value between the
|
|
* simple reads).
|
|
*
|
|
* Note that simpleRead can read the value from any database node while
|
|
* standard read always read the value on the database node which is
|
|
* primary for the record.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int simpleRead();
|
|
|
|
/**
|
|
* Define the NdbOperation to be a standard operation of type committedRead.
|
|
* When calling NdbConnection::execute, this operation
|
|
* read latest committed value of the record.
|
|
*
|
|
* This means that if another transaction is updating the
|
|
* record, then the current transaction will not wait.
|
|
* It will instead use the latest committed value of the
|
|
* record.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int dirtyRead();
|
|
|
|
#ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED
|
|
int committedRead();
|
|
#endif
|
|
|
|
/**
|
|
* Define the NdbIndexOperation to be a standard operation of type
|
|
* updateTuple.
|
|
*
|
|
* When calling NdbConnection::execute, this operation
|
|
* updates a tuple in the table.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int updateTuple();
|
|
|
|
/**
|
|
* Define the NdbIndexOperation to be a standard operation of type
|
|
* deleteTuple.
|
|
*
|
|
* When calling NdbConnection::execute, this operation
|
|
* deletes a tuple.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int deleteTuple();
|
|
|
|
/**
|
|
* Define the NdbIndexOperation to be a standard operation of type
|
|
* dirtyUpdate.
|
|
*
|
|
* When calling NdbConnection::execute, this operation
|
|
* updates without two-phase commit.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int dirtyUpdate();
|
|
|
|
/** @} *********************************************************************/
|
|
/**
|
|
* @name Define Interpreted Program Operation
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* Update a tuple using an interpreted program.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int interpretedUpdateTuple();
|
|
|
|
/**
|
|
* Delete a tuple using an interpreted program.
|
|
*
|
|
* @return 0 if successful otherwise -1.
|
|
*/
|
|
int interpretedDeleteTuple();
|
|
|
|
/** @} *********************************************************************/
|
|
|
|
private:
|
|
NdbIndexOperation(Ndb* aNdb);
|
|
~NdbIndexOperation();
|
|
|
|
void closeScan();
|
|
|
|
int receiveTCINDXREF(NdbApiSignal* aSignal);
|
|
|
|
// Overloaded method from NdbOperation
|
|
void setLastFlag(NdbApiSignal* signal, Uint32 lastFlag);
|
|
|
|
// Overloaded methods from NdbCursorOperation
|
|
int executeCursor(int ProcessorId);
|
|
|
|
// Overloaded methods from NdbCursorOperation
|
|
int indxInit(const class NdbIndexImpl* anIndex,
|
|
const class NdbTableImpl* aTable,
|
|
NdbConnection* myConnection);
|
|
|
|
int equal_impl(const class NdbColumnImpl*, const char* aValue, Uint32 len);
|
|
int prepareSend(Uint32 TC_ConnectPtr, Uint64 TransactionId);
|
|
|
|
// Private attributes
|
|
const NdbIndexImpl* m_theIndex;
|
|
const NdbTableImpl* m_thePrimaryTable;
|
|
Uint32 m_theIndexDefined[NDB_MAX_ATTRIBUTES_IN_INDEX][3];
|
|
Uint32 m_theIndexLen; // Length of the index in words
|
|
Uint32 m_theNoOfIndexDefined; // The number of index attributes
|
|
};
|
|
|
|
#endif
|